如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
在我们的位置,我们将使用mysqli和PDO分为准备语句和事务支持之类的东西.有些项目使用一个,另一个项目.我们很难有可能转移到另一个RDBMS.
我更喜欢PDO,因为它允许为预准备语句提供命名参数,据我所知,mysqli没有.
在我们整合项目时只使用一种方法,是否还有其他优点和缺点选择其中一种作为标准?
重复:mysqli或PDO - 有哪些优点和缺点?
我希望将一个网站从mysql移动到mysqli或pdo作为主要的学习工具,但如果可能的话,还要提高性能.
我已经阅读了http://php.net/manual/en/mysqli.overview.php,看起来两者都符合我的需求,但无论如何都不会强烈倾斜.
该网站目前主要使用非面向对象的代码,但我确实有其他语言的OO经验.绝大多数查询都是简单的复杂select语句,只有很少的更新/插入.您对我自己的教育和这个特定网站最有用的建议是什么?
如果您需要任何其他信息,请告诉我.
谢谢.