【发布时间】:2023-05-10 05:52:02
【问题描述】:
我目前正在处理一个页面,我需要用户输入几个变量,这些变量在提交时会显示在整个页面中。
问题是,它需要是 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 是需要输入的字符
提前致谢:)
编辑
澄清一下,唯一的代码就是上面的代码,页面没有从数据库等中提取数据(你在上面看到的实际上是完整的 php 页面,只是缺少 html 头部标签等)。
【问题讨论】:
-
100% secure code是什么意思 JS 不安全,它在机器上运行,你无法控制。这里最简单的“攻击”是用我想要的任何东西覆盖showInput,或者如果我只想禁用它,从节点中删除id,弄乱按钮,或者更改按钮上的点击处理程序。这才刚刚开始,那么安全是什么意思? -
承认 100% 安全可能是错误的术语。这样,我的意思是用户将无法向主机注入或添加任何内容或使用它来遍历另一个目录(例如使用 ../../../)。例如对于一些使用 mysql 的页面,我不得不更改为 PDO 等以停止注入。
-
这就是我的意思,用户只需在浏览器中按 F12 即可在您的页面中执行几乎任何他/她想要的。就像
showInput = null;或document.getElementById('var1').innerHTML = "...whatever..."或......你(几乎)没有任何控制权。 -
所以检查元素等意味着您无法控制,您如何建议让用户安全地将变量添加到 html 页面?
标签: javascript xss