首页 文章

如何防止sql注入?无需修改SQL查询[重复]

提问于
浏览
3

这个问题在这里已有答案:

如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");

那是因为用户可以输入类似值'); DROP TABLE表; - ,查询变为:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

可以采取哪些措施来防止这种情况发生?

1 回答

  • 1

    你需要做的绝对最小值是转义变量:

    $unsafe_variable = mysql_real_escape_string($_POST['user_input']);
    

    查询中的任何内容都不得在此时更改 . 然而,这不一定是故事的结尾,因为 mysql_real_escape_string 不是无懈可击的,你仍然会受到使用更复杂技术的人的注射攻击 .

    整个 mysql_query API已被删除,它推荐PDO作为基线 .

    确保正确执行操作的最佳方法是使用带有占位符值的预准备语句 . 那是你的查询看起来像这样:

    INSERT INTO table name (column1) VALUES (:column1)
    

    使用PDO,您可以为占位符命名 . 这使得以后执行语句变得非常简单,只需匹配值:

    $stmt->execute(array('column1' => $_POST['user_input'));
    

    因此,避免注射虫的最佳方法是首先避免注射 . 占位符值将被正确,安全,最重要,一致地替换 . 所有这一切都是一个错误,你认为你逃脱了一些事情,但你没有,人们可以破坏你的网站 .

相关问题