繁体   English   中英

XSS javascript,漏洞利用检查

[英]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而不是innerTextinnerHTML

注意

<script>alert(document.cookie);</script>

无论如何将无法正常工作,必须

<svg onload="alert(document.cookie)" />

或类似。 HTML5指定不应执行通过innerHTML插入的<script>标记。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM