在php中,我们经常见到这样的语句
if(isset($_GET['id'])) { $id=$_GET['id']; //logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id." "); fclose($fp); // connectivity $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);
但是这样的sql语句,会造成一种叫做万能密码登录的漏洞。这种漏洞在用户登录的时候,不用进行知道密码,只需要知道用户名就可以。比如用户名是admin' or '1'='1 密码为空。这样就能使得用户的账号直接被登录了。
对比在Pythonh中的sql执行语句
user = User.query.filter(User.password == password , User.telephone == telephone).first()
python中的语句也是这样同样是用户密码在数据库中进行对比,怎么两个执行的结果还不一样?
这里我导入的一个sqlalchemy库,这个库封装的非常好,把那些可疑的字符全部都进行过滤了。用sqlalchemy里面的sql语句,就可以避免所谓的万能密码登录了
看来学习Python还是挺好的呀
2019-08-01