- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我允许用户将数据作为参数插入到 JS 中时 innerHTML
像这样的功能:
element.innerHTML = “User provided variable”;
<img src=a onerror='alert();'>
.innerHTML
我所理解的方法在将输入插入页面之前对其进行解码。使用 HTML+JS 编码,我注意到
.innerHTML
仅解码 JS,但保留 HTML 编码。
.innerHTML
时对 HTML 进行编码然后进行 JS 编码,而不是在 HTML 中进行双重编码。方法?
最佳答案
Could somebody provide an example of why I should HTML encode and thenJS encode, and not double encode in HTML when using the .innerHTMLmethod?
var userProdividedData = "<%=serverVariableSetByUser %>";
element.innerHTML = userProdividedData;
像 ASP.NET
<%= %>
输出不编码的服务器端变量。如果用户“良好”并提供值
foo
那么这会导致呈现以下 JavaScript:
var userProdividedData = "foo";
element.innerHTML = userProdividedData;
到目前为止没有问题。
"; alert("xss attack!");//
.这将呈现为:
var userProdividedData = ""; alert("xss attack!");//";
element.innerHTML = userProdividedData;
这将导致 XSS 漏洞利用,其中代码实际上在上面的第一行中执行。
Except for alphanumeric characters, escape all characters less than256 with the \xHH format to prevent switching out of the data valueinto the script context or into another attribute.
var userProdividedData = "<%=JsEncode(serverVariableSetByUser) %>";
element.innerHTML = userProdividedData;
哪里
JsEncode
按照 OWASP 建议进行编码。
var userProdividedData = "\x22\x3b\x20alert\x28\x22xss\x20attack\x21\x22\x29\x3b\x2f\x2f";
element.innerHTML = userProdividedData;
现在您已经针对 XSS 保护了您的 JavaScript 变量分配。
<img src="xx" onerror="alert('xss attack')" />
怎么办?作为值(value)?这对于变量赋值部分很好,因为它会像上面一样简单地转换为等效的十六进制实体。
element.innerHTML = userProdividedData;
会导致
alert('xss attack')
在浏览器呈现内部 HTML 时执行。这就像
DOM Based XSS攻击,因为它使用呈现的 JavaScript 而不是 HTML,然而,当它通过服务器时,它仍然被归类为反射型或存储型 XSS,具体取决于最初设置的值的位置。
function escapeHTML (unsafe_str) {
return unsafe_str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\"/g, '"')
.replace(/\'/g, ''')
.replace(/\//g, '/')
}
制作你的代码
element.innerHTML = escapeHTML(userProdividedData);
或者可以通过 JQuery 的
text()
来完成功能。
I just have one more question: You mentioned that we must JS encodebecause an attacker could enter
"; alert("xss attack!");//
. But if wewould use HTML encoding instead of JS encoding, wouldn't that alsoHTML encode the"
sign and make this attack impossible because wewould have:var userProdividedData =""; alert("xss attack!");//";
<img src="xx" onerror="alert('xss attack')" />
之类的攻击。全部使用
\xHH
编码格式以插入其有效负载 - 这将实现攻击所需的 HTML 序列,而无需使用 HTML 编码会影响的任何字符。
\
然后他们可以强制浏览器错过结束引号(因为
\
是 JavaScript 中的转义字符)。
var userProdividedData = "\";
这会触发 JavaScript 错误,因为它不是一个正确终止的语句。如果应用程序在显眼位置呈现,这可能会导致应用程序拒绝服务。
var userProdividedData = "<%=serverVariableSetByUser1 %>" + ' - ' + "<%=serverVariableSetByUser2 %>";
然后用户可以输入
\
在第一和
;alert('xss');//
在第二。这会将字符串连接变成一个大任务,然后是 XSS 攻击:
var userProdividedData = "\" + ' - ' + ";alert('xss');//";
由于像这样的边缘情况,建议遵循 OWASP 指南,因为它们尽可能接近防弹。您可能认为添加
\
到 HTML 编码值列表解决了这个问题,但是在以这种方式呈现内容时使用 JS 后跟 HTML 还有其他原因,因为此方法也适用于属性值中的数据:
<a href="javascript:void(0)" onclick="myFunction('<%=JsEncode(serverVariableSetByUser) %>'); return false">
不管是单引号还是双引号:
<a href='javascript:void(0)' onclick='myFunction("<%=JsEncode(serverVariableSetByUser) %>"); return false'>
甚至不加引号:
<a href=javascript:void(0) onclick=myFunction("<%=JsEncode(serverVariableSetByUser) %>");return false;>
如果您按照评论中提到的方式进行 HTML 编码,则为实体值:
onclick='var userProdividedData ="";"'
(缩短版)
userProdividedData
将是
";;
代替
";
所以当你把它添加到
innerHTML
调用你,你会再次遇到 XSS。请注意
<script>
块不通过浏览器的 HTML 解析器处理,除了结束
</script>
标签,
but那是
another story .
alert(serverVariableSetByUser);
就像设置 HTML 一样简单
element.innerHTML = escapeHTML(userProdividedData);
在这两种情况下,它都会正确显示,而不会中断输出或导致不良代码执行的某些字符。
关于javascript - XSS 预防和 .innerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661497/
服务器XSS的区别有什么明确的解释和客户端 XSS? 我阅读了 OWASP 网站上的解释,但对我来说不是很清楚。我知道反射、存储的 DOM 类型。 最佳答案 首先,为了让其他人发现问题,我们从 OWA
我在考虑我的应用程序的 XSS 漏洞。在服务器端,我不清理输入或输出,所以 alert(document.cookies) 完全如此存储在数据库中。要在客户端查看此值,我使用 Mustache。如果这
我无法理解存储的 xss 和反射的 xss 之间的区别是什么。你能举个例子告诉我吗? 最佳答案 存储型 XSS 意味着一些 坚持数据(通常存储在数据库中)未在页面中进行清理,这意味着每个人都可能受到该
Cross-site scripting (XSS) is a type of computer security vulnerability typically found in web appli
有人可以用简单的英语解释 XSS 是如何工作的吗?也许举个例子。谷歌搜索没有多大帮助。 最佳答案 跨站点脚本基本上是动态网页的安全漏洞,攻击者可以创建恶意链接将不需要的可执行 JavaScript 注
站点的本地存储值可以被xss(跨站点脚本)覆盖吗?据我在 Chrome 和 Firefox 中验证,一个站点的 localstorage 值不能被其他站点访问。谁能告诉我 localstorage 值
据我了解,我需要在 header 服务器端禁用 X-XSS-Protection,以防止通过 GET 请求发生 XSS。 例如,用户浏览到 http://mysite.com/index.php?pa
在 OWASP XSS prevention cheat sheet它表示无法将不受信任的数据安全地放入 .setinterval JS 函数中。即使被转义/编码,XSS 仍然是可能的。 但如果我有这
我正在创建一个网页,用户可以在其中交互并在远程计算机上执行基本的文件系统操作(创建文件/目录、删除文件/目录、导航文件系统)。 该网页是基本的 HTML(UTF-8 编码)和 Javascript。我
可能是简单的解决方案,但我不明白为什么我尝试通过索引页面上的 XSS 输入在我的欢迎页面上运行此警报脚本不起作用。 我有一个带有表单的简单 index.htm 页面:
好的,所以我一直在阅读关于此处和其他地方的 Markdown ,并且用户输入和数据库之间的步骤通常被给出为 将 markdown 转换为 html 清理 html(带白名单) 插入数据库 但对我来说,
我最近发现 this blog entry在将 XSS 攻击直接写入数据库的工具上。它看起来是一种非常好的方法来扫描应用程序以查找我的应用程序中的弱点。 我尝试在 Mono 上运行它,因为我的开发平台
我正在经历一场无情的 XSS 攻击,但我似乎无法阻止。我的网站上共有三个输入表单 - 一个用于上传图像,一个用于向页面添加评论,第三个用于通过 php 发送电子邮件。我以一种或另一种方式保护它们所有人
我正在寻找有关 Qooxdoo 安全性的信息。 我想检查我的应用程序 vs OWASP top 10 需要审查的一点是 XSS OWASP A3 XSS 我如何确定 Qooxdoo 是安全的,可以抵御
我的网站遭受了多次 XSS 攻击。以下 HTML 片段是攻击者注入(inject)的 XSS 向量: 看起来脚本不应该执行,但是使用 IE9 的开发工具,我能够看到浏览器将 HTML 转换为以
CaSTLe Project 功能丰富,包括一些很棒的子项目,使用它进行开发是一种乐趣。 我的团队几乎准备好交付定制的 EAM我们正在完善我们的系统。我们尝试了一些基本的 XSS 攻击并猜测:它们都有
通过简单地转换以下(“大 5”): & -> & < > -> > " -> " ' -> ' 你会阻止 XSS 攻击吗? 我认为您也需要在字符级别上列入白名
我正在使用 ASP.NET 并且在 ASP.NET 页面上具有用于检查 XSS 验证的验证属性。但是我想知道这真的足够了吗? 我访问了一些关于 stackoverflow 的相关帖子,这对我有帮助,但
我们正在使用 ASP.NET MVC 5.0 来构建一个网站。如果我在保存时输入一些 javascript 文本框,我会得到一个“检测到可能不安全的输入”错误页面 - 太好了。 然而,我们的一些屏幕使
持久性 XSS 和非持久性 XSS 之间的主要区别是什么? 最佳答案 顾名思义,持久型 XSS 和非持久型 XSS 的区别如下。 持久性 XSS 存储在 cookie 或服务器数据库中的 XSS。 聊
我是一名优秀的程序员,十分优秀!