Dom*_*oSL 6 php mysql sql-injection
我认为我有一个完整的工作网站,有许多调用MySQL服务器,并在这个网站上做了一些研究,我看到以这种形式制作我的查询:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Run Code Online (Sandbox Code Playgroud)
我可以解决安全问题,但是,正如我所说的,我有很多调用MySQL服务器,并且解决问题的最好方法(在我的情况下)直接转到vars im传递给查询但是whitout使用a MySQL函数因为im出了查询.让我解释一下,我有这个:
mysql_query("SELECT * FROM `post` WHERE id=" . $_GET['edit']);
Run Code Online (Sandbox Code Playgroud)
我不能对这个查询进行修改,因为我在我的所有代码中都有很多这样的东西,我想要检查var上的注入,$ _GET ['edit'].
如何使用纯PHP检查查询变量的SQL注入?喜欢:
$_GET['edit']=freehack($_GET['edit']);
Run Code Online (Sandbox Code Playgroud)
Bra*_*rad 12
不要这样做.通过$_GET使用"安全"版本替换参数值,您将污染输入数据,而其他地方可能需要这些数据.
只有在需要在数据库层上使用数据时才转义数据.它只需要您一点时间来修复您的查询,从长远来看将为您节省大量的麻烦.
无论如何,你在做什么仍然不安全! 请参阅: PHP:mysql_real_escape_string是否足以清除用户输入?
你真的应该使用PDO准备好的查询.此外,在查询中使用之前,您应该检查用户输入的有效性.
"我不能对这个查询进行修改,因为我的所有代码中都有很多这样的内容"在讨论安全性时是错误的态度.您所拥有的是一个主要的设计问题,可以解决各种安全问题.即使您执行的操作类似于最后描述的过滤方法,也无法确定是否涵盖了所有情况.
您应该使用某种数据库访问类来查询数据库,而不是在整个代码中进行这样的随机调用.通过这种方式,您可以编写一次清理代码,并且绝对可以确保在任何地方都可以调用它.重构是值得的,因为您将获得额外的安全性.