python中的万能密码

在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

原文地址:https://www.cnblogs.com/Triangle-security/p/11277110.html