首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >因SQL注入而进入数据库驱动的web开发时感到紧张

因SQL注入而进入数据库驱动的web开发时感到紧张
EN

Stack Overflow用户
提问于 2011-04-16 07:55:34
回答 3查看 97关注 0票数 0

可能重复:

What is SQL injection?

In PHP when submitting strings to the DB should I take care of illegal characters using htmlspecialchars() or use regex?

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

EN

回答 3

Stack Overflow用户

发布于 2011-04-16 08:00:23

sql注入的基本操作是在查询中使用参数。

因此,这是不好的,可以用于注入黑客的sql:

代码语言:javascript
运行
复制
mySqlCommand.Text = "select * from mytable where FirstName = " + tbox.Text;

这样做:

代码语言:javascript
运行
复制
mySqlCommand.Parameters.Add("@FirstName", tbox.Text)
mySqlCommand.Text = "select * from mytable where FirstName = @FirstName";

注:我使用了“伪码”。我不知道php或mysql,但同样的原则应该适用。

票数 0
EN

Stack Overflow用户

发布于 2011-04-16 08:09:54

我相信,如果我指给你们看这条主线,这个问题是可以回答的:

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

编辑:

读到它,我发现在执行动态SQL时,有关参数技术的内容非常有趣。如果是这样的话,我会读到:

票数 0
EN

Stack Overflow用户

发布于 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字段:

代码语言:javascript
运行
复制
$user = "john"
$query = "SELECT * FROM table WHERE username='$user';"

将$query设置为"SELECT * FROM table WHERE username='john';

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

代码语言:javascript
运行
复制
"SELECT * FROM tab;e WHERE username='' OR 1==1 OR username='';"

此查询将始终返回true,从而发生成功的攻击。如果我们转义输入,那么单个qoutes就会被转义,这样它们就不会像上面那样互相替换。(想想看,就像添加一个反斜杠来转义通过$user变量进入的单个qoutes。)这是一个简单的例子,更复杂的SQL语句可以造成更大的破坏,但是攻击的方法是一样的。

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

https://stackoverflow.com/questions/5685230

复制
相关文章

相似问题

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