Web开发常见攻击及应对方法
Web开发过程中安全问题十分值得重视,常见的攻击有:XSS攻击、CSRF攻击、Inject攻击、Dos攻击。
# XSS攻击
XSS攻击全称是Cross Site Scripting即跨站脚本攻击,攻击者利用Web页面漏洞,盲目信任用户提交的内容,向页面插入恶意Script代码,当用户浏览该页面时,嵌入的script代码被执行,从而达到恶意攻击的目的。XSS攻击可能会窃取用户信息,包括cookie、token等。
# 存储型XSS攻击
- 恶意脚本被存在数据库中;
- 访问页面 - 读数据 - 被攻击
- 危害最大,对全部用户都可见
# 反射型XSS攻击
- 不涉及数据库
- 从 URL 上攻击,需要用户自己点击恶意链接
- 对点击的用户造成攻击,盗取cookie
# 基于 DOM 的攻击
- 基于 DOM 漏洞,与反射型不同的时,脚本被注入到DOM中,是浏览器解析执行的结果
# 防范措施
- 过滤标签
- 对用户输入的信息和 URL 参数进行过滤
- 对输出的行进行 HTML 编码
# CSRF 攻击
CSRF攻击,全称Cross Site Request Forgery即跨站点请求伪造, 通过伪造其他网站的请求来实现攻击的。
CSRF 利用浏览器对用户身份的保存(cookie),诱导用户在身份有效期内触发请求攻击,发送恶意请求:
- 用户登陆A网站,浏览器自动保存登陆的cookie
- 用户进入攻击网站B,在B网站的诱导下出发了对A网站的请求
- 请求过程会带着用户的cookie,则该请求被误认为是用户发起的请求,被A服务器正常处理,造成攻击
# 预防
- 设置cookie 的 sameSite 属性,让cookie 在跨站请求时候不会发送;
- 验证http referer 字段,该字段表示发起请求的源网址,通过验证该请求referer字段来判断是否为正常访问域名,如果不是则拒绝请求;
- token 验证,受到csrf攻击是因为只验证了用户的身份,并没有验证是否由自己的页面发起的,为访问用户添加token,可以在请求时判断是否为真实访问用户
token: 可以翻译成令牌,是服务端生成的一串字符串,用来作为客户端请求的令牌;当第一次登陆时,服务器端生成一个 token 并返回给客户端,客户端以后带上token便可以来访问服务器请求数据。 token 分为三部分,header密文、payload密文、签名三部分组成,均是由base64加密的:
- header密文:对JWT进行的签名算法
- payload: 包含用户名、创建时间和过期时间
- 签名: 签名必须知道密钥才可以计算。
# Injection
# SQL Injection
SQL 注入是指在前端数据传入后台数据时,没有做严格的判断,导致传入的数据拼接到SQL语句中,被当作SQL语句的一部分执行,导致数据库受损。
原因:后台服务器接收相关参数为经过过滤直接带入数据库查询。
# Dos攻击
Dos攻击,即Denial of sevice,通过构造特定请求,导致服务器资源消耗,来不及响应更多请求,导致请求挤压,进而血崩效应。
# Redos
利用正则表达式贪婪模式来占用大量请求资源。
# DDoS
短时间内来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应。
参考: 计算机网络--网络攻击XSS与CSRF(https://blog.csdn.net/zemprogram/article/details/109451863)