[英]XSS javascript, exploit check
我目前在一个页面上工作,我需要用户输入几个变量,提交后这些变量将显示在整个页面中。
问题是,它必须是100%安全的代码,虽然我可以使用PDO / mysql等,但是我不太熟练使用javascript。
目前,我有以下几点:
<script language="JavaScript">
function showInput() {
document.getElementById('var1').innerText =
document.getElementById("user_var1").value;
document.getElementById('var2').innerText =
document.getElementById("user_var2").value;
}
</script>
与HTML
<form>
your variable 1 is = <input type="text" name="message" id="user_var1"><br />
your variable 2 is = <input type="text" name="message" id="user_var2"><br />
</form>
<input type="submit" onclick="showInput();">
<p>var1 = <span id='var1'></span></p>
<p>var2 = <span id='var2'></span></p>
据我所知,使用“ .innerText”应该停止使用任何html等,并且我已经测试过
<script>alert(document.cookie);</script>
这导致上述内容仅按原样打印(不运行)。
例如
your variable 1 is = <script>alert(document.cookie);</script>
您是否还建议采取其他措施以确保其安全(XSS或其他方式)? 仅需要输入的字符是/和AZ 0-9
提前致谢 :)
为了澄清起见,唯一的代码就是上面的内容,该页面没有从数据库中提取数据,等等(上面看到的实际上是完整的php页面,只是缺少了html head body标签等)。
仅基于您在上面所做的事情,您就不会拥有XSS。 innerText
将进行正确的转义。
要让您的网站100%安全是一项艰巨的任务。 我要看的一些事情是通过带有HSTS的 HTTPS运行您的站点,以防止网络级别的攻击者篡改站点, 参数化SQL查询以及在提交表单时根据需要添加CSRF令牌。
特别是关于XSS,人们获得XSS的最常见方式之一是因为他们执行不安全的DOM操作。 如果您担心安全性,强烈建议您在处理“虚拟DOM”时将JS移植到React中,这使React可以执行上下文敏感的转义。 这也减轻了开发人员必须进行适当转义的负担。
快速获得安全性的一个好处是在您的站点中添加了CSP策略 ,并将script-src
指令设置为self
。 CSP策略建立了可以在您的站点上运行某些内容的上下文。 因此,例如,如果有人将script-src
设置为self
(意味着您的JS会加载到<script>
标记的src
属性中,该标记指向与HTML的投放位置相同的域,而不是页面上的内联)进行XSS操作(很可能*)不会运行。
这些只是为您提供的不同安全解决方案的一些示例,并且是深度安全实践的简要介绍。 很高兴您认真对待安全性!
*在某些情况下(例如,如果您正在动态生成脚本),可以在其中运行它们的代码。
这里没有漏洞(请downvote前仔细阅读)。
为了澄清起见,唯一的代码就是上面的内容,该页面没有从数据库中提取数据,等等(上面看到的实际上是完整的php页面,只是缺少了html head body标签等)。
因此,除当前用户外,以下两个字段均不能填充:
<input type="text" name="message" id="user_var1">
<input type="text" name="message" id="user_var2">
因为不存在填充这两个字段的代码。
由代码填充的两个DOM元素如下:
<span id='var1'></span>
<span id='var2'></span>
这样做的代码是
document.getElementById('var1').innerText =
document.getElementById("user_var1").value;
document.getElementById('var2').innerText =
document.getElementById("user_var2").value;
它使用的是非标准的innerText
而不是textContent
,但是innerText
会设置文本内容而不是HTML内容,从而阻止浏览器呈现任何标签或脚本。
但是,即使改为设置innerHTML
属性,用户也可以做的就是攻击自己(就像在浏览器中打开开发人员工具一样)。
但是, textContent
正确的功能行为和互联网标准的考虑,我将使用textContent
而不是innerText
或innerHTML
。
注意
<script>alert(document.cookie);</script>
无论如何将无法正常工作,必须
<svg onload="alert(document.cookie)" />
或类似。 HTML5指定不应执行通过innerHTML插入的<script>
标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.