可能重复:
我真的需要有人清楚地解释如何处理黑客,如果真的像听起来那么复杂的话。
发布于 2011-04-16 08:00:23
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,但同样的原则应该适用。
发布于 2011-04-16 08:09:54
我相信,如果我指给你们看这条主线,这个问题是可以回答的:
我不会担心打针。有很多人面对这个问题,你可以在网上找到很多。请记住,清理将最终被查询的所有数据。
编辑:
读到它,我发现在执行动态SQL时,有关参数技术的内容非常有趣。如果是这样的话,我会读到:
发布于 2011-04-16 08:18:22
http://php.net/manual/en/function.mysql-real-escape-string.php
基本上是转义从用户那里接收到的任何输入。如果它不破坏任何东西,那么它通常是值得对整个$_POST (或$_GET)数组进行清理的。
在上面的链接中,有一些写得很好的函数,可以递归地“清理”输入,这样就可以安全地在代码中使用。
您的担忧是有理由的,但是SQL注入并不是很难防范的。通常,SQL漏洞是由于我的经验中的粗心大意而存在的。
通常,它的基本形式中的SQL注入只是在输入中添加一个qoute或双qoute,以便关闭您的SQL字段:
$user = "john"
$query = "SELECT * FROM table WHERE username='$user';"将$query设置为"SELECT * FROM table WHERE username='john';“
但是,请注意,如果我们设置$user = "' OR 1==1 OR username=''" (注意单个qoutes),我们得到:
"SELECT * FROM tab;e WHERE username='' OR 1==1 OR username='';"此查询将始终返回true,从而发生成功的攻击。如果我们转义输入,那么单个qoutes就会被转义,这样它们就不会像上面那样互相替换。(想想看,就像添加一个反斜杠来转义通过$user变量进入的单个qoutes。)这是一个简单的例子,更复杂的SQL语句可以造成更大的破坏,但是攻击的方法是一样的。
https://stackoverflow.com/questions/5685230
复制相似问题