首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止sql注入?不对SQL查询进行修改

如何防止sql注入?不对SQL查询进行修改
EN

Stack Overflow用户
提问于 2016-07-14 05:50:28
回答 1查看 883关注 0票数 3

如果用户输入未经修改就插入到SQL查询中,那么应用程序就容易受到SQL注入的影响,如下面的示例所示:

代码语言:javascript
复制
$unsafe_variable = $_POST['user_input']; 

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

这是因为用户可以输入类似于value');DROP;--,然后查询变成:

代码语言:javascript
复制
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

怎样才能防止这种情况发生呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 06:05:35

这里您需要做的绝对最小值是转义该变量:

代码语言:javascript
复制
$unsafe_variable = mysql_real_escape_string($_POST['user_input']);

在这一点上,查询中没有任何东西需要更改。不过,这并不一定是故事的结尾,因为mysql_real_escape_string并不是无懈可击的,而且您仍然暴露在那些使用更复杂技术的人的注入攻击中。

整个PHP已经被破坏,它已经过时,最新版本的mysql_query不再支持它。您需要继续做一些更好的事情,我建议将PDO作为基线。

确保您做得对的最好方法是使用准备好的语句和占位符值。您的查询如下所示:

代码语言:javascript
复制
INSERT INTO table name (column1) VALUES (:column1)

使用PDO,您可以命名占位符。这使得以后执行语句非常容易,只需匹配以下值:

代码语言:javascript
复制
$stmt->execute(array('column1' => $_POST['user_input'));

因此,避免注入错误的最好方法是首先避免注入。占位符值将被正确、安全、最重要的一致替换。它所需要做的是一个错误,你认为你逃脱了一些东西,但你没有,人们可以全面关闭你的网站。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38366397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档