Php 由于SQL注入,对进入数据库驱动的web开发感到紧张

Php 由于SQL注入,对进入数据库驱动的web开发感到紧张,php,mysql,sql,Php,Mysql,Sql,可能的重复项: 我真的需要有人清楚地解释如何处理黑客,以及它是否真的像听起来那么复杂。sql注入的基本方法是在查询中使用参数 所以,这是不好的,可以用来注入黑客的sql: mySqlCommand.Text = "select * from mytable where FirstName = " + tbox.Text; 这样做: mySqlCommand.Parameters.Add("@FirstName", tbox.Text) mySqlCommand.Text = "select

可能的重复项:


我真的需要有人清楚地解释如何处理黑客,以及它是否真的像听起来那么复杂。

sql注入的基本方法是在查询中使用参数

所以,这是不好的,可以用来注入黑客的sql:

mySqlCommand.Text = "select * from mytable where FirstName = " + tbox.Text;
这样做:

mySqlCommand.Parameters.Add("@FirstName", tbox.Text)
mySqlCommand.Text = "select * from mytable where FirstName = @FirstName";
注意:我使用了“伪代码”。
我不知道php或mysql,但同样的原则应该适用。

我相信,如果我向您指出以下线索,这个问题可以得到回答:

我不会担心注射。很多人都面临着这个问题,你可以在网上找到很多。请记住清理最终将被查询的所有数据

编辑:

在阅读相关文章时,我发现在进行动态SQL时,有关参数技术的这一点非常有趣。如果是这样的话,我会读到:

基本上,从用户那里转义您收到的任何输入。如果它不会破坏任何东西,那么对整个$\u POST(或$\u GET)数组进行清理通常是值得的

在上面的链接中有一些编写良好的函数,可以递归地“清理”输入 在代码中使用它是安全的

您的担心是有道理的,但SQL注入并不很难防范。根据我的经验,SQL漏洞通常是由于粗心大意而存在的


通常,基本形式的SQL注入只是向输入添加一个qoute或两个qoute,以便关闭SQL字段:

$user = "john"
$query = "SELECT * FROM table WHERE username='$user';"
将$query设置为
“从username='john'所在的表中选择*;

但是,请注意,如果我们设置
$user=“”或1==1或username=''”
(注意单个qoutes) 我们得到:


此查询将始终返回true,因此会发生成功的攻击。如果我们对输入进行转义,则单个QOUTE将被转义,从而它们不会像上面那样被解释。(想象一下,这就像添加一个反斜杠来逃避通过$user变量输入的单个QOUTE。)这是一个简单的例子,更复杂的SQL语句可能造成更多的伤害,但攻击方法是相同的。

给他们一周一块蛋糕(其他糖果也可以),他们会为你做任何事情。:-)投票结束。请在上面搜索一下。本主题已涉及多次:
"SELECT * FROM tab;e WHERE username='' OR 1==1 OR username='';"