xxs攻击描述
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script(php,js等)代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。
攻击的条件
XSS攻击需要具备两个条件:
一、需要向web页面注入恶意代码;
二、这些恶意代码能够被浏览器成功的执行。
场景一:
1. 用户通过表单提交方式提交,"<script>alert('xxs攻击')</script>"保存到数据库title字段中。
2. 商品展示页面需要获取该title字段,展示给用户。
后台获取数据跳转前台页面:
@RequestMapping("toIndex")
public String toIndexHtml(Model model){
// 模拟从数据库取出的假数据
model.addAttribute("title", "<script>alert('xxs攻击')</script>");
return "index";
}
html页面 :
<body>
商品标题:<p>${title!}</p>
</body>
浏览器:
解决
很简单,在网关层次拦截所有请求参数,对参数中包含的特殊符号进行转义;
如:<script>alert('xxs攻击')</script>
转义为:<script>alert('xxs攻击')</script>
转义完成后再保存到数据库,这样用户再在浏览器获取该参数进行展示就可以方式xxs。
java:
@RequestMapping("toIndex")
public String toIndexHtml(Model model){
// xxs攻击
model.addAttribute("title", "<script>alert('xxs攻击')</script>");
// 转义<和>符号防止xxs攻击
model.addAttribute("content", "<script>alert('xxs攻击')</script>");
return "index";
}
html:
<body>
商品标题:<p>${title!}</p>
<br>
商品内容:<p>${content!}</p>
</body>
浏览器:
content字段做了特殊符号转换所以会正常展示用户保存的数据,从而防止xxs。
🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
🍎原创不易,感觉对自己有用的话就❤️点赞👉收藏💬评论把。