Dav*_*801 0 php mysql sql-injection mysql-real-escape-string
我有一个php文件,在开始时,从使用$ _GET发送的内容中分配一些变量.
然后它执行一些mysql查询,处理输出,然后回显一些文本和变量.
我在代码中设置的唯一保护是mysql_real_escape_string
在GET上.
这足以防止攻击吗?
还有什么可以做的?
好吧,你mysql_real_escape_string
错了.
不过这不是你的错 - 这是PHP社会中最令人讨厌的妄想之一.即使是官方手册页也说错了.
此功能与保护任何内容和特别是GET变量无关
这个函数只是转义字符串分隔符,使字符串分隔符无法破坏字符串.因此,2个最重要的后果:
mysql_real_escape_string()
,无论其来源或来源或可能的危险性如何处理因此,为了保护您的SQL查询,您必须遵循整套规则,而不仅仅是欺骗"使用mysql_real_escape_string清理您的数据".
您可以从类似主题的早期答案中学习如何保护您的SQL:在PHP中将字符串提交到数据库时,我应该使用htmlspecialchars()处理非法字符还是使用正则表达式?
更新
场景以显示mysql_real_escape_string不是银弹的原因
使用网址
http://www.example.com/news.php?offset=99999+UNION+SELECT+password+FROM+users+--
一个代码
$offset = mysql_real_escape_string($_GET['offset']);
$sql = "SELECT title FROM news LIMIT $offset,20";
Run Code Online (Sandbox Code Playgroud)
如果不是那么自负,就像没有那么华丽的小桌子一样,但在某种程度上同样具有灾难性.
归档时间: |
|
查看次数: |
183 次 |
最近记录: |