首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Layman术语中的注入/SQL注入攻击

Layman术语中的注入/SQL注入攻击
EN

Security用户
提问于 2015-10-04 02:08:16
回答 2查看 600关注 0票数 1

我很难弄清楚什么是SQL注入攻击,或者更一般地说,什么是注入攻击。互联网上的大多数解释都很难理解。有人能用外行人的话解释一下注入攻击是什么,特别是SQL注入吗?此外,有什么方法来抵御这些呢?

谢谢

EN

回答 2

Security用户

回答已采纳

发布于 2015-10-04 09:57:12

用外行人的话说:

典型的web应用程序分为三层(browser +web服务器+后端数据库).当用户访问一个网站时,他的浏览器接收到html和js,它们是静态网页的产物,以及使用服务器端代码(例如php、asp)动态生成的网页。在登录时,您向web服务器发送密码和用户名,web服务器处理这些参数,并应用预先编程的身份验证逻辑(在php、asp中).Such逻辑需要使用存储用户数据的数据库进行验证,并允许简单验证:用户名匹配密码。因此,服务器端逻辑接受您的参数并查询数据库(例如MySQL)。

代码语言:javascript
复制
SELECT * FROM Users WHERE username='your_supplied_username' AND password='your_supplied_password';

数据库处理这个过程,并返回(如果数据库设计正确)只有一个(用户名和密码匹配)或零(错误密码)匹配的“代表你”。

SQL呢?

我不是你的兄弟,兄弟:一个草率的开发人员会接受你发送的参数,并将它们直接放到your_supplied_*字段中。如果用户不是恶意用户,这根本不是问题。然而,对于恶意攻击者来说,这为攻击打开了一扇巨大的大门。如果您熟悉SQL,那么您知道这一点,并且需要左表达式和右表达式才能计算为true。另外,在SQLi中,注释字符"--“是一个有用的朋友,所以,如果我写我的_username‘;-?

代码语言:javascript
复制
SELECT * FROM Users WHERE username='your_supplied_username';--' AND password='your_supplied_password';

服务器端代码将接受我的输入,将其应用于字符串查询,并将其发送到数据库。数据库将

代码语言:javascript
复制
' AND password='your_supplied_password';

同时保持:

代码语言:javascript
复制
SELECT * FROM Users WHERE username='your_supplied_username'

这是一个有效的查询,很容易计算为true。这里的行为各不相同。如果用户名是唯一的(通常是唯一的),则只返回一条记录。如果不是,将返回多个记录,web服务器代码(例如php)通常会选择第一个记录。如果您熟悉SQL,现在您可能会得到创造性的查询和链查询,使用通配符并变得狂野。现在的问题是:

作为一个开发人员,我能做什么?

现在,这取决于您正在使用的服务器端语言,但是编码原语通常都是相同的。您可以使用php (http://php.net/manual/en/mysqli.real-escape-string.php)或使用准备好的语句(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)转义特殊序列。

我如何知道服务器是否受到SQLi的影响?您可以运行诸如SQLMap或SQLNinja等工具。您还可以转到表单并编写

'gibberish中,“希望”会混淆php查询解析器,并泄漏浏览器上显示的错误(SQL语句错误)。还有其他技术,例如在查询中注入一个睡眠语句,以检查数据库在返回之前是否挂起几秒钟。作为一种防御机制,在将SQL错误发送给用户之前,您应该始终在服务器端代码上处理SQL错误,以避免信息泄漏。

保持安全;)

票数 3
EN

Security用户

发布于 2015-10-04 04:16:32

SQL注入攻击本质上是攻击者通过利用应用程序处理某些字符串(特别是字符串转义字符)中的漏洞或错误配置来访问数据库内容的一种方式。

我能想到的最简单的方式来描述它是你有一个web表单,需要用户输入来完成一项调查。在正常情况下,用户将在表单中输入他们的信息并提交。但是,如果web应用程序没有通过删除某些特殊字符来正确地清理输入,攻击者就可以输入一个SQL命令来提取数据,而不是键入预期的数据。在http://www.w3schools.com/sql/sql_injection.asp中有一些常用的SQL注入方法和技术的示例。

有几种方法可以减轻SQL注入可能造成的损害。清理输入可以防止攻击者输入执行SQL命令所需的特殊字符,限制web数据库帐户的权限可以阻止SQL注入可以收集的数据。

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

https://security.stackexchange.com/questions/101801

复制
相关文章

相似问题

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