此时另一个页面 select.php 负责提供给其他用户访问,则可以看到我们的信息。
<?php
$id = $_GET['id'];
//链接数据库
$con = mysqli_connect("localhost","root","123456", "xssdb");
//查询数据
$sql = "select * from xss where id='{$id}';";
$result = mysqli_query($con, $sql);
//$data = mysqli_fetch_all($result); // 从结果集中获取所有数据
//print_r($data);
while($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}
?>
当我们输入正确的值,如下图所示:
id:1
name:yangxiuzhang
此时数据库中可以看到我们插入的值。
通过本地网址(localhost:8088/xss/select.php?id=1)我们能获取id为1对应的name值。
当我们输入JS代码时,该程序又将如何运行呢?接着我们插入如下数据:
id:2
name:< script>alert(‘hack’)< /script>
注意,这里的hack的单引号要进行转义,因为sql语句中的$name是单引号的,所以这里不转义的话就会闭合sql语句中的单引号,不然注入不进去。
原理:用户提交数据到后端,后端存储至数据库中,然后当其他用户访问查询页面时,后端调出数据库中的数据,显示给另一个用户,此时的XSS代码就被执行了。
此时数据库插入的内容如下所示,可以看到JS代码已经成功插入我们的后台。
最后,我们调用 select.php (localhost:8088/xss/select.php?id=2)页面,可以看到成功执行了该脚本文件。
存储型XSS的数据流向为:前端–>后端–>数据库–>后端–>前端。
3.DOM型
首先,什么是DOM呢?
DOM是指文档对象模型,是一个平台中立和语言中立的接口,有的程序和脚本可以动态访问和更新文档的内容、结构和样式。在web开发领域的技术浪潮中,DOM是开发者能用来提升用户体验的最重要的技术之一,而且几乎所有的现在浏览器都支持DOM。
DOM本身是一个表达XML文档的标准,HTML文档从浏览器角度来说就是XML文档,有了这些技术后,就可以通过javascript轻松访问它们。下图是一个HTML源代码的DOM树结构。
其次,什么优势DOM-XSS呢?
DOM-XSS漏洞是基于文档对象模型(Document Objeet Model脚本代码大全,DOM)的一种漏洞,不经过后端,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
DOM型的XSS是一些有安全意识的开发者弄出来的,比如说接受参数会做一些过滤,把一些字符转义一下,但是转义之后依然会存在着XSS的情况。常见可能触发DOM-XSS的属性包括:document.referer、window.name、location、innerHTML、documen.write等。
如下图所示,我们上面输入的可以看到这行代码规律,把这个大括号、小括号以及双页号进行转移,按理说转移之后它应该不会再作为它的标签存在,不会存在XSS的代码。
下面Script通过ID获得的这个值,复制到了这个DIV上,经过DOM操作之后,之前转义的字符就变为它的标签,所以经过DOM操作的XSS我们称之为DOMXSS。它有可能通过URL传播,也有可能通过服务器传播。
最后,DOM型跨站脚本的攻击是如何实现呢?
下面简单讲解一个DOM-XSS代码,假设前端是一个index3.html页面。
DOM-XSS测试3 <body>
欢迎大家阅读CSDN Eastmount的博客,一起进步,一起加油喔!
请输入用户名: