在PHP中单引号会自动转义吗?那有什么清洁需求?
|
我正在阅读有关网络安全性的文章,其中一个很明显的主题是SQL注入。我正在尝试建立一个基本的PHP页面,在其中可以执行SQL注入(它是本地服务器)。但是,看来我的代码(或服务器)自动转义了单引号。这是新标准还是我不知道的服务器上已激活的设置?是否需要清除输入内容?
这是我的服务器端代码的示例:
$foo = $_POST[\'foo\'];
$sql = \"SELECT * FROM bar WHERE foo=\'\" . $foo . \"\'\";
connectoTo(\"database\");
query($sql);
connectTo()连接到数据库服务器并选择数据库,而query()是执行查询时常用的过程。从来没有清洗过。但是,当我发送
$_POST[\'foo\'] = \"\' OR 1=1 #\"
PHP页面收到此作为
$_POST[\'foo\'] = \"\\\' OR 1=1 #\"
那么foo已经逃脱了吗? $ _GET也是如此。
有什么想法吗?我们是否不再需要清理用户输入?
没有找到相关结果
已邀请:
2 个回复
距相镭
,那么可以将其放在代码的顶部:
摘自:http://www.php.net/manual/zh/security.magicquotes.disabling.php 现在,解决您的SQL注入问题。您会发现,除了引号之外,还有更多的事情需要担心。您无需指定所使用的数据库,但这无关紧要。避免注入问题的最佳方法是使用准备好的/参数化的查询。 准备的查询是使用参数发送到服务器的查询,其值稍后发送。
注意the6ѭ和
,因为它们是参数。当我执行此语句时,那些将被替换为适当的值。由于服务器正在执行此操作,因此无需转义(和/或在后台为您转义,具体取决于您使用的数据库层)。 在PHP中实现此功能的最简单方法是利用PDO。对于此框,如何使用PDO太长了,因此我将指导您使用教程: http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/
良阑纠苫
,并使用
。