应用软件安全编程--17预防基于 DOM 的 XSS

DOM型XSS从效果上来说也属于反射型XSS,由于形成的原因比较特殊所以进行单独划分。在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object 文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过 JS 脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过 DOM 来动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。当应用程序的客户端代码将不受信的参数直接用于动态更新页面的 DOM 节点,应用程序将易于受到基于DOM 的XSS攻击。

对于预防基于DOM的XSS的情况,示例给出了不规范用法(javascript 语言)示例。

javascript 复制代码
示例:

<script)

function           test(){

var str = document.getElementByld("text").value;

document.getElementByld("test").innerHTML="(a      href=""+str+")testLink(/a)";

 

</script)

 

<div              id="test"></div>



<input   type="text"id="text"   value=""/>

<input  type="button"  value="write"  onclick="test()"/>

上面的JavaScript 代码片段可从元素 input 中读取 text信息,并将其显示给用户。

在这里,'write'按钮的onclick 事件调用了 test()方法,而该函数直接引用用户输入的值修改页面 的 DOM 节点,当用户输入οnclick=alert(/xss/)//,应用程序将受到基于DOM 的 XSS 攻击。

为了避免基于Dom 的 XSS 攻击,建议采用以下方式进行防御:

a) 与预防反射型XSS 相同,对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如 く、〉、、"以及<script〉、javascript 等)进行过滤。

b) 与预防反射型 XSS 相同,根据数据将要置于HTML上下文中的不同位置(HTML 标签、HTML 属性、JavaScript脚本、CSS、URL), 对所有不可信数据进行恰当的输出编码。

c) 与预防反射型 XSS 相同,设置 HttpOnly 属性。

相关推荐
Ticnix1 分钟前
Vue3 页面切换 / 刷新后恢复滚动位置的实现方案(超精简)
前端·javascript
小林攻城狮2 分钟前
el-tabs 页签中表格组件宽度闪动问题解决方案
前端·vue.js
haokan_Jia4 分钟前
postgresql实现数据动态地图切片服务
java·服务器·前端
无敌憨憨大王10 分钟前
迷宫问题(图论)
前端·图论
窝子面11 分钟前
LeetCode练题一:async 和await 和 promise
开发语言·前端·javascript
软件资深者11 分钟前
【保姆级】OpenClaw 进阶全攻略:高级玩法 + 飞书 + Skills + 安全防护,1 小时变身 “养虾高手”!
人工智能·安全·飞书·数字员工·openclaw·龙虾·高级玩法
踩着两条虫16 分钟前
AI 驱动的 Vue3 应用开发平台 深入探究(十六):扩展与定制之自定义组件与设计器面板
前端·agent·ai编程
爱敲代码的菜菜18 分钟前
【项目】基于正倒排索引的Java文档搜索引擎
java·开发语言·前端·javascript·搜索引擎·servlet
李剑一19 分钟前
告别冗余代码!Cesium点位图标模糊、重叠?自适应参数调优攻略,一次封装终身复用!
前端·vue.js·cesium