这是我参与「第四届青训营 」笔记创作活动的第3天
今天从两个角度看web开发安全之旅 即hacker--攻击 开发者--防御
攻击篇
XSS (Cross-Site Scripting)
xss即跨站脚本,通常是利用网页开发时的漏洞进行攻击
例如开发者使用innerHTML这个API且无过滤的实现将用户提交内容嵌入代码中
若攻击者提交恶意代码
😈 例如
<div>
<img src='x' onerror="alert(1)">
<!-- 由于图片的src是x 所以会执行onerror😮😮 -->
</div>
XSS原理图
XSS特点
- 通常难以从UI上发现,因为是在暗地里执行脚本
- 可以窃取用户信息(cookie、token)
- 还可以绘制UI(如弹窗),诱骗用户点击
XSS demo
Stored XSS
- 恶意脚本被存在数据库中
- 访问页面—>读数据 ==被攻击
- 危害最大,对全部用户可见
Reflected XSS
- 不涉及数据库
- 从URL上攻击
DEMO
DOM-based XSS
- 不需要服务器的参与
- 恶意攻击的发起+执行 全在浏览器完成
Mutation-based XSS
- 利用了浏览器渲染DOM的特性—— 独特优化
- 不同浏览器会有区别——按浏览器进行攻击
CSRF
- 在用户不知情的前提下
- 利用用户权限(cookie)
- 构造指定HTTP请求,窃取或修改用户敏感信息
demo
Injection
sql injection
- 读取请求字段
- 直接以字符串的形式拼接SQL语句
async renderForm(ctx){
const {username,form_id} = ctx.query
const result = await sql.query(`
SELECT a,b,c FROM table
WHERE username = ${username}
AND form_id = ${form_id}
`)
ctx.body = renderForm(result)
}
demo
injection不只sql
-
CLI
-
OS command
-
Server-Side Request Forgery(SSRF),服务器伪造请求
- 严格来说 SSRF不是 injection 但原理类似
CSRF
请求头部
if 伪造请求==异常来源
then 限制请求来源 —》 限制伪造请求
-
Origin
- 同源请求中,GET+HEAD不发送
-
Referer
token
①用户绑定:攻击者也可以是注册用户===可以有自己的token 😨
②过期时间:前向保密 🤫
iframe
\