我正在创建一个网页,用户可以在远程计算机上进行交互并执行基本文件系统操作(创建文件/目录,删除文件/目录,导航文件系统)。 该网页是基本的HTML(UTF-8编码)和Javascript。我需要让这个网页XSS证明。
使用Javascript(这输出百分比编码的十六进制值)可以转义用户输入中的所有非字母数字字符(以防止基于DOM的XSS)和文件名信息(以防止存储的XSS)吗?
我基本上只将字母数字输入列入白名单。此外,由于我使用的是百分比编码的十六进制值,我假设不应该存在UTF编码漏洞。
有人能想到这个机制中的任何安全漏洞吗?
答案 0 :(得分:8)
使用javascript(我认为这就是你所说的)进行转义似乎并不太安全。它在用户计算机上运行,他们可以通过一些努力绕过转义机制。
你想要做的事情听起来是正确的,但你需要在服务器端进行。
答案 1 :(得分:1)
有几点需要注意:
在我对Will HTML Encoding prevent all kinds of XSS attacks?的回答中查看更多信息。您将在那里找到所有您需要知道的信息。
答案 2 :(得分:1)
补充其他要点的说明:
确保您正确使用GET和POST,因为这是许多网站上最简单的安全漏洞。
如果用户输入将触发对数据库的任何更改,请确保使用POST。
如果您要检索要显示的信息,则只有用户GET。
答案 3 :(得分:0)
这个听起来是安全的,可能是,但有一个问题。它只适用于正确实现它。这很容易出错。如果你想要它,那没关系,但我建议使用一些已经测试过的库来做这件事,而不是自己动手。
答案 4 :(得分:0)
编码很好。最大的潜在风险是您对数据执行的操作以及是否/何时解码/显示数据。如果您解码用户输入并显示它,解码数据,那么您可能会遇到问题。
如果您没有迫切需要支持在潜在的XSS漏洞方面风险较大的角色(例如'<','>',';'等),那么我认为黑名单是合理的这些人物也是如此。这样,如果您解码并显示数据,则无法表达XSS问题。
答案 5 :(得分:0)
防御XSS的基本方法是使用正则表达式尽可能验证输入并编码所有输出。编码输出可能很棘手,因此最好使用库。应用程序的至少一个重要输入是文件名,因此您需要一个与您的目标操作系统的任何有效文件名匹配的正则表达式。仅接受字母数字输入将使您的应用无法在常见操作系统上处理许多文件名。我不遵循为什么使用%hex值会有任何好处。没有理由不能以这种方式编码恶意脚本。相同的脚本可以有许多有效的utf-8表示。您需要对抗XSS编码实践进行更多的背景阅读。 Google OWASP供参考。