XSS攻击(跨站脚本攻击)
定义:XSS(Cross-Site Scripting)攻击是指攻击者在目标网站上注入恶意的客户端脚本,当其他用户浏览该网站时,嵌入在网页中的这段脚本会被执行,从而达到攻击的目的,如盗取用户信息、劫持用户会话等。
演示:
假设有一个简单的留言板网站,允许用户提交留言并将留言显示给所有访问者。如果网站没有对用户输入的数据进行适当的过滤或转义,攻击者可以提交包含JavaScript代码的留言:
<script>alert('XSS Attack!');</script>
当其他用户浏览含有这条留言的页面时,这段脚本就会在他们的浏览器中执行,弹出警告框。
防御措施:
- 对用户输入进行验证和过滤。
- 使用HTTP头
Content-Security-Policy
限制资源的加载和执行。 - 对输出进行编码,如使用HTML实体编码。
SQL注入攻击
定义:SQL注入攻击是指攻击者在网站输入数据的地方输入SQL命令,由于应用程序没有对输入进行恰当的处理,这些命令会被发送到数据库执行。攻击者可以利用这种攻击手段读取、修改甚至删除数据库中的数据。
演示:
考虑一个网站,用户可以通过输入用户名和密码登录。后端代码直接将用户输入拼接到SQL查询中:
# 假设这是一个简化的Python后端处理登录请求的代码
username = input("Username: ")
password = input("Password: ")
sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'"
如果攻击者输入用户名admin' --
,密码随意,构造的SQL语句变为:
SELECT * FROM users WHERE username = 'admin' --' AND password = '任意值'
--
是SQL中的注释符号,这会使得密码检验部分被注释掉,导致攻击者无需密码即可以admin
身份登录。
防御措施:
- 使用预处理语句(Prepared Statements)。
- 对用户输入进行严格的验证。
- 限制数据库账户的权限。
CSRF攻击(跨站请求伪造)
定义:CSRF(Cross-Site Request Forgery)攻击是指攻击者诱导用户在当前已认证的Web应用中,不知不觉中发送恶意请求。这种攻击背后的原理是利用了Web应用对用户的信任。
演示:
假设有个银行网站,用户登录后可以通过访问http://bank.example.com/transfer?amount=100&to=attacker
来转账。
攻击者可以在另一个网站上放置以下HTML代码:
<img src="http://bank.example.com/transfer?amount=10000&to=attacker" style="display: none;">
当用户浏览该恶意网站时,上面的img
标签会试图加载这个图像,实际上是发起了一个转账请求。如果用户是银行网站的登录用户,那么这个请求将以用户的身份被执行。
防御措施:
- 使用CSRF令牌:为每个用户的会话生成一个随机的请求令牌,并要求所有敏感操作的请求必须携带这个令牌。
- 检查Referer头:验证请求是否来自合法的源。
- 使用SameSite Cookie属性:限制第三方网站发起的请求。