XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站
脚本攻击缩写为 XSS,XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到 web
网站里面,供给其它用户访问,当用户访问到有恶意代码的网页就会产生 xss 攻击。

xss 攻击的危害

  • 盗取各类账号
  • 非法转账
  • 非法发送电子邮件
  • 网站挂马
  • 控制受害者机器向其他网站发送攻击

XSS 的防御

  • 对输入的数据(包括url中的参数)进行过滤,过滤掉能执行前端脚本的内容
  • 对输出的内容进行处理,进行动态html编码

XSS 类型

反射型 XSS

非持久化,需要用户点击才能触发

漏洞代码案例:

1
2
3
4
<?php
$name = $_GET['name'];
echo "Hello ".$name;
?>

当GET传参进去一个name的时候,返回 Hello + name,可以看到代码中并未对传进去和传出去的参数进行处理,能够造成XSS攻击

payload:

1
?name=<script>alert(1)</script>

其中 alert(1) 只是 JS 中的一个函数,只是用来测试是否存在XSS注入,点到为止即可

存储型 XSS

比如留言板,用户名,邮箱等一些信息存进数据库中,要显示的时候再提取出来。

漏洞代码案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include("./init.php");
$name = $_GET['name'];
$email = $_GET['email'];

$conn = new mysqli($hostname,$dbuser,$dbpass,$dbname);
$sql = "INSERT INTO user (username,email) values (?,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss",$name,$email);
$stmt->execute();

......

?>

上述代码虽然规避了SQL注入,但是仍然可能存在XSS注入。

DOM 型注入