web开发安全 - 攻击篇
1、跨站脚本攻击Cross-Site Scripting(XSS)
在开发维护的页面中攻击者通过一种方式将恶意脚本注入进来。当用户用户访问页面的时候,这些脚本就会执行,进而完成攻击。
XSS攻击特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
public async submit(ctx){
const { content,id } =ctx.request.body
//没有对content过速
await db.save({
content,
id
});
}
public async render(ctx) {
const { content }=await db.query({
id: ctx.query.id
});
//没有对 content过滤
ctx.body =·<div>¥{content}</div>·
这时提交一个script标签作为content字段到服务器端,完成注入。
XSS攻击分类
stored XSS
当用户访问页面时,涉及到从服务端读写数据,只要完成这个链路,用户就会被攻击。
- 恶意脚本被存在数据库中
- 访问页面→读数据-被攻击
- 危害最大,对全部用户可见
reflected XSS
反射型不及数据库,而是从URL上攻击
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成。
Mutation-based XSS
按浏览器进行区别攻击。
- 利用了浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器进行攻击)
2、Cross-site request forgery(CSRF)跨站伪造请求
在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息,成本非常低。
3、Injection
在发起请求时注入参数。
sql参数在请求上带入,服务器端读取参数,运行这段sql代码,使得攻击者可以获取其他数据,修改或删除数据。
4、Denial of Service(DoS)
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。 还有一些没有写到,未完待续。