【发布时间】:2011-02-03 01:23:28
【问题描述】:
我已经阅读了各种资料,但我不确定如何将它们实现到我的代码中。我想知道是否有人可以帮我快速处理它?一旦在我的代码中向我展示了如何做到这一点,我想我就可以把它捡起来!这是来自我在网上找到的 AJAX 自动完成功能,尽管我发现它由于“%$queryString%”或其他原因而容易受到 SQL 注入的影响?任何帮助都非常感谢!
if ( isset( $_POST['queryString'] ) )
{
$queryString = $_POST['queryString'];
if ( strlen( $queryString ) > 0 )
{
$query = "SELECT game_title, game_id FROM games WHERE game_title LIKE '%$queryString%' || alt LIKE '%$queryString%' LIMIT 10";
$result = mysql_query( $query, $db ) or die( "There is an error in database please contact support@laglessfrag.com" );
while ( $row = mysql_fetch_array( $result ) )
{
$game_id = $row['game_id'];
echo '<li onClick="fill(\'' . $row['game_title'] . '\',' . $game_id . ');">' . $row['game_title'] . '</li>';
}
}
}
【问题讨论】:
-
我不是 php 高手,所以我不会“回答”,但这很容易受到攻击,因为您没有清理您的输入。基本上,用户文本被直接写入查询中,这将允许他们编写类似“'; drop table games;”的内容。和噗!你的桌子会消失。您需要通过 php 的内置 mysql 清理函数之一运行它,它的名称中有转义,我只是无法确切知道它是什么。
-
@Chris Thompson:这听起来像是一个答案。请将其发布为答案并删除此评论。然后我们可以正确地为您的答案投票。
-
使用参数化查询。由于使用了缓存的执行计划,您可能会比动态 sql 获得性能改进,并且不必担心清理 - us3.php.net/manual/en/mysqli.prepare.php
-
@S. Lott 我同意,虽然我很伤心,因为这是对问题所在的解释,但我对如何具体解决漏洞没有很好的答案(即我不记得函数名称)
标签: php sql mysql ajax code-injection