前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈xss——跨站脚本攻击(二)

浅谈xss——跨站脚本攻击(二)

作者头像
行云博客
发布于 2020-07-13 02:39:13
发布于 2020-07-13 02:39:13
66102
代码可运行
举报
文章被收录于专栏:行云博客行云博客
运行总次数:2
代码可运行

接着上文讲:浅谈xss——跨站脚本攻击(一)

这次谈谈存储型XSS

和反射性XSS的即时响应相比,存储型XSS则需要先把利用代码保存在比如数据库或文件中,当web程序读取利用代码时再输出在页面上执行利用代码。但存储型XSS不用考虑绕过浏览器的过滤问题,屏蔽性也要好很多。

存储型XSS攻击流程:

存储型XSS的白盒审计同样要寻找未过滤的输入点和未过滤的输出函数。

新建XssStorage.php文件,并加入以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span style="font-size:18px;">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>  
<html>  
<head>  
<title>XssStorage</title>  
</head>  
<body>  
<h2>Message Board<h2>  
 <br>
<form action="XssStorage.php" method="post">  
 Message:<textarea id='Mid' name="desc"></textarea>  
<br>  
<br>  
Subuser:<input type="text" name="user"/><br> 
<br>
<input type="submit" value="submit" onclick='loction="XssStorage.php"'/>  
 </form>  
 <?php  
 if(isset($_POST['user'])&&isset($_POST['desc'])){  
 $log=fopen("sql.txt","a");  
 fwrite($log,$_POST['user']."\r\n");  
 fwrite($log,$_POST['desc']."\r\n");  
fclose($log);  
}  
      
if(file_exists("sql.txt"))  
{ 
$read= fopen("sql.txt",'r');  
while(!feof($read))  
{  
echo fgets($read)."</br>";  
}  
fclose($read);  
}  
?>  
</body>  
</html>
</span>  

页面功能简述:

这个页面采用POST提交数据,生成、读取文本模拟数据库,提交数据之后页面会将数据写入sql.txt,再打开页面时会读取sql.txt中内容并显示在网页上,实现了存储型xss攻击模拟。

打开页面,随意输入内容:

可以看到页面正常显示页面留言信息。当我们在Message中输入<script>alert('xss')</script>时,页面成功弹窗 :

并且我们重启浏览器之后再加载该页面,页面依然会弹窗,这是因为恶意代码已经写入数据库中,每当有人访问该页面时,恶意代码就会被加载执行!


这就是所谓的存储型XSS漏洞,一次提交之后,每当有用户访问这个页面都会受到XSS攻击,危害巨大。

存储型XSS的执行位置通常不同于输入位置。我们可以看出,存储行XSS的数据流向是:

浏览器 -> 后端 -> 数据库 -> 后端 -> 浏览器

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
React基础语法08-点击按钮,获取input框的值(通过ref来获取)
使用setState来改变username的值,让username的值等于val,即表单输入的值就赋给了userusername。
王小婷
2019/11/10
5.4K0
React基础语法01-双向数据绑定
把model里面的值赋给input,即把this.state里面的username值给了input,当页面加载的时候,model层就能改变视图view。 model
王小婷
2019/11/10
8110
React基础语法01-双向数据绑定
React 基础实例教程
首先,需要核心库react.js与React的DOM操作组件react-dom.js
书童小二
2018/09/03
4.5K0
React  基础实例教程
React基础语法
JSX语法中,可以在大括号内放置任何有效的JavaScript表达式。例如2+2、user.firstName或formatName(user)等均是有效的JavaScript表达式。
前端_AWhile
2020/05/18
5K0
React--11: refs与事件处理非受控组件和受控组件
首先,受控组件不能使用ref了。那我们想改变值怎么办呢?给输入框添加onChange事件,只要输入框的值改变就会触发一个函数。
用户4793865
2023/01/12
5770
React组件基础
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5zo7zriO-1668351209724)(images/组件.png)]
用户10169043
2022/11/18
3.2K0
React组件基础
React--12:高阶函数
saveUsername 和 savePassword 都是在往状态中写入值。那么现在我们把他们写成一个方法 saveFormData,并用传参进行区分标识。
用户4793865
2023/01/12
7270
React—表单及事件处理
表单 提到React中表单及事件处理,就不得不先介绍一下控组件与非受控组件的概念。 在HTML中,表单元素与其他元素最大的不同是它自带值或数据,而且在我们的应用中,只要是有表单出现的地方,就会有用户输入,就会有表单事件触发,就会涉及的数据处理。 在我们用React开发应用时,为了更好地管理应用中的数据,响应用户的输入,编写组件的时候呢,我们就会运用到受控组件与非受控组件这两个概念。 React推荐我们在绝大多数情况下都使用受控组件。这样可以保证表单的数据在组件的state管理之下,而不是各自独立保有各自的数
小胖
2018/06/28
1.5K0
01-React基础(JSX, State, Refs, Props组件交互, Event, 生命周期)
引入JS # react 开发JS react.development.js # react dom渲染JS react-dom.development.js # jsx语法转换JS babel.min.js # 参数传值校验JS prop-types.js JSX语法 # 容器 <div id="test"></div> # 注意写JSX语法需要定义为babel <script type="text/babel"> const myName = "flower"; # 创建虚拟DOM, 不需要写
彼岸舞
2022/08/24
1.1K0
01-React基础(JSX, State, Refs, Props组件交互, Event, 生命周期)
React---组件实例三大核心属性(三)refs与事件处理
    获取值:const { input1 } = this.refs; console.log(input.value)
半指温柔乐
2021/04/22
1.2K0
受控组件和非受控组件
React的受控组件与非受控组件的概念是相对于表单而言的,在React中表单元素通常会持有一下内部的state,因此它的工作方式与其他HTML元素不一样,而获取表单元素内部state的实现方式的不同,就产生了受控组件和非受控组件。
WindRunnerMax
2021/01/13
1.7K0
React基础语法06-事件对象的应用
老规矩,先看完官方文档,记录学习笔记: 教程:https://www.runoob.com/react/react-tutorial.html 文档:http://caibaojian.com/react/
王小婷
2019/11/10
5910
【前端】react的基础认识
首先,确保您的项目中已经安装了Node.js和npm。然后使用以下命令安装React:
人不走空
2024/02/21
1560
React受控组件
在React中,受控组件是指那些其值由React的状态(state)管理和控制的组件。通过使用受控组件,我们可以将表单元素的值和状态进行绑定,实现对用户输入的控制和处理。
堕落飞鸟
2023/05/19
8670
【React】学习笔记(一)——React入门、面向组件编程、函数柯里化
用于构建用户界面的 Javascript 库,它主要专注于界面与视图。采用组件化模式、声明式编码,提高开发效率及组件复用率。在React Native中可以使用React语法进行移动端开发。使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互。
鸡先生
2022/10/29
5.2K0
【React】学习笔记(一)——React入门、面向组件编程、函数柯里化
React入门五:事件处理
步骤: 1.在state中添加一个状态,作为表单元素的value的值(控制表单元素值的由来) 2.给表单元素绑定change事件,将表单元素的值 设置为state的值(控制表单元素值的变化)
用户4793865
2023/01/12
1.9K0
React Ref 使用总结
useRef 还可以传入一个初始值,这个值会保存在 ref.current 中,上面代码中,如果不给 div 元素传递 ref={divRef},则 divRef.current 的值将是我们传入的初始值。
多云转晴
2020/09/08
7.1K0
React Ref 使用总结
React基础
React起源于FaceBook的内部项目,用来架设Instagram的网站,并于2013年5月开源。
小二丶
2023/11/28
1.5K1
React 表单与事件
HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素生来就保留一些内部状态。
陈不成i
2021/07/29
1K0
React学习记录
(3)在事件中想要去获取到组件的实例化对象 需要绑定this : onChange={this.inputChange.bind(this)
biaoblog.cn 个人博客
2022/08/11
2810
相关推荐
React基础语法08-点击按钮,获取input框的值(通过ref来获取)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档