我正在构建一个web应用程序,在这个应用程序中,我需要让用户在输入字段中输入任何字符(甚至是特殊字符- ~!@#$%^&*()_-+=|\{}[];:'"<,.>)。为了减轻他们造成的问题,我要处理两件事-
够了吗还是我遗漏了什么?
为了给出一个更好的上下文,我正在解释流程。
在我的web应用程序中,用户输入直接进入数据库。它从数据库中获取以创建html (还设置html元素、属性和样式)和JSON。在创建HTML时,我正在转义从数据库获取的值。
在创建JSON时,我不会转义这些获取的值。我们的另一个应用程序使用这个JSON来创建HTML。我正在确保这些值在插入到HTML之前被转义。
发布于 2015-05-18 10:46:20
没有什么特别的人物。
这完全取决于在应用程序中使用输入的上下文。对SQLi和XSS进行保护是很好的,但是如果输入随后被用于操作系统外壳调用,则对您没有好处。
在使用数据时,一定要对其进行编码或消毒--尽可能晚一点。例如,当输出到HTML时,此时HTML会编码。
因此,如果不知道应用程序中的所有输出点或接收器,就不可能知道是否遗漏了什么。如果您所做的只是将数据插入数据库,并将其输出到HTML (而不是JSON、JavaScript、CSS等),那么如果您在正确的位置执行正确的参数化和HTML输出编码,那么就XSS和SQLi漏洞而言,您是很好的。对数据执行任何其他操作都需要适当的编码、消毒或使用正确的API (取决于格式)。
发布于 2015-05-18 12:08:11
你把用户输入直接输入到数据库中?坏主意(一般情况下)
你应该净化所有的输入。(因此输入来自客户端,输入来自数据库)。
在您的示例中,您依赖于客户端来确保值的安全。你永远不应该完全相信的事情,因为它超出了你的控制范围。
至于剩下的部分,我将使用@SilverlightFox,因为他的观点都是有效的,并且只需加1。用户输入不仅应在显示上进行清洁,而且在存储之前也应进行消毒。
https://security.stackexchange.com/questions/89505
复制相似问题