XSS攻击

XSS:跨站脚本攻击

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

XSS类型

  • 反射型XSS:JavaScript代码在前端页面上,当受害者进入攻击者构造的URL时,触发事件
  • 存储型XSS:JavaScript代码存储在数据库中,只要用户进入相应页面,就会触发事件,不需要攻击者构造URL
  • DOM型XSS:一种特殊的反射型XSS,前端存在将用户输入的内容,立即显示在当前页面的行为。

反射型XSS

后端代码:

<?php
$content = $_GET['content'];
?>
<script>
    var xss = '<?php echo $content?>';
    document.write(xss);
</script>

上图代码,可以看到,后端接收前端的content内容,并未过滤,因此,可以构造如下url

http://xxx.com/?content=’;

可以出发弹窗事件,此处javascript代码可以任意修改。

xss1

后端代码未过滤用户的输入,或者说过滤不严,导致浏览器将用户输入解析为javascript代码,可能导致正常用户被钓鱼攻击

存储型XSS

后端代码:

连接数据库代码
<?php
error_reporting(E_ALL & ~E_NOTICE);
$xss = $_POST['xss'];
$connection = mysql_connect("localhost","root","root");
mysql_select_db('xss',$connection);
if($xss !== null){
    $sql = "insert into xss(id,payload) values ('1','$xss');";
    $result = mysql_query($sql) or die("执行sql语句失败".mysql_error());
}
?>

<form action="" method="post">
    <input type="text" name="xss" style="width: 200px">
    <input type="submit" value="submit">
</form>

后端获取到前端输入,并未对数据进行过滤,直接插入数据库。

展示在前端代码
<?php
$connection = mysql_connect("localhost","root","root");
mysql_select_db('xss',$connection);
$sql = "select payload from xss where id = 1";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)){
    echo $row['payload'];
}

前端从数据库获取数据,并输入。
前端插入代码
xss2
数据库中
xss3
进入代码触发界面
xss4

每次点击进入此页面,都会从数据库获取数据,并输出,因为数据库已被插入javascript代码,因此,每次获取到的数据,都会被浏览器解析为javascript代码,而不是文本。从而导致攻击的发生。

DOM型XSS

后端代码:

<?php
$xss = $_GET['xss'];
?>
<input type="text" value="<?php echo $xss;?>">
<div id="print"></div>
<script type="text/javascript">
    var text = document.getElementById("text");
    var print = document.getElementById("print");
    print.innerHTML = text.value;
</script>

通过php代码,get请求,得到url中的数据,输出在input标签中。同时,页面内的javascript代码,将input标签中的内容,显示在div标签中,只要闭合标签,就可以导致dom型xss攻击。

总结

最后,我们可以知道,xss攻击,通过不合法的输入,闭合正常的html标签,然后加上javascript代码,让浏览器器误以为这是正常的代码,解析并执行,形成的一种攻击方式。

如何防御
我们可以认为用户的输入全都是恶意的,在每一个能让用户输入数据的地方,进行过滤。

​ 例如:转字符实体等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值