XSS javascript,漏洞检查

XSS javascript, exploit check

本文关键字:检查 漏洞 javascript XSS      更新时间:2023-09-26

我目前正在一个页面上工作,我需要用户输入几个变量,当提交时,然后在整个页面中显示。

问题是,它需要是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或其他)?需要输入的字符只有/和A-Z 0-9

Thanks in advance:)

<标题>编辑

只是为了澄清,唯一的代码是上面的内容,页面不是从数据库中提取数据等(你上面看到的实际上是完整的php页面,只是缺少html头部正文标签等)。

根据您上面所做的,您将不会有XSS。innerText会进行适当的转义。

让你的网站100%安全是一项艰巨的任务。我想看看的一些事情是通过HTTPS和HSTS运行您的站点,以防止网络级对手篡改站点,参数化您的SQL查询,在表单提交时添加CSRF令牌。

特别是关于XSS,人们被XSS攻击的最常见方式之一是因为他们执行了不安全的DOM操作。如果你担心安全性,我强烈建议将你的JS移植到React,因为你正在操纵一个"虚拟DOM",它允许React执行上下文敏感的转义。它还减轻了开发人员进行适当转义的负担。

一个快速的安全胜利是添加一个CSP策略到您的网站和设置script-src指令self。CSP策略建立了某些内容可以在您的站点上运行的上下文。因此,如果例如,您有script-src设置为self(意味着您的JS加载在<script>标签的src属性中,指向与HTML服务相同的域,而不是内联在页面上),如果有人做XSS,它将(最有可能*)不运行。

这些只是您可以使用的不同安全性解决方案的一些示例,以及对安全性深入实践的简要介绍。我很高兴你认真对待安全问题!

*在某些情况下(例如,如果你动态生成你的脚本),他们的代码可以运行

这里没有漏洞(请在投票前阅读)。

只是为了澄清,唯一的代码是上面的,页面不是从数据库中提取数据等(您在上面看到的实际上是完整的PHP页面,只是缺少HTML标题正文标签等)。

因此以下两个字段只能由当前用户填写:

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

注意

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

无论如何都不行,它必须是

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

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