我是网络开发的新手,现在我也需要处理经典的ASP项目。主要议程是删除旧代码的安全问题,而不是开发新的东西。
最初,我有很多SQL注入问题。我成功地使用参数查询删除SQL注入。但是,一旦相同的代码显示跨站点脚本:持久性问题。然后,我使用了Server.HTMLEncode("")
。即使它成功地解决了这个问题。但是,现在它显示为跨站点脚本:差的验证问题。
<TD> <% =rs("hse_desc")%> </TD>
<TD> <% =(Server.HTMLEncode(rs("hse_desc")))%> </TD>
有谁可以帮我解决这个问题。
答案 0 :(得分:0)
这只是说你的编码器很弱:
您使用的是什么静态代码分析器?
*请从Classic ASP开始尖叫。真的没有办法保证它。 IMHO
答案 1 :(得分:0)
您是否直接使用&lt;%= rs(“hse_desc”)%&gt;在你的代码中。 如果这些数据直接与跨站点一起发送,则它是一个漏洞,任何人都可以在此代码中注入数据。
您必须将此数据设置为新变量并使用类似
的函数对其进行保护function clearme(value)
if value = "" then exit function
value = replace(value,"'","")
value = replace(value,"`","")
value = replace(value,"%","")
value = replace(value,"<","<")
clearme= value
end function
if len(rs("hse_desc")) > 1 then
mydata = clearme(rs("hse_desc"))
else
mydata = ""
end if
现在datam是一个明确的值,可以在代码中的任何地方使用
答案 2 :(得分:0)
我认为这可能是误报。你的代码
<TD> <% =(Server.HTMLEncode(rs("hse_desc")))%> </TD>
将解决任何XSS问题(只要你只为HTML输出而不是JavaScript)。
我认为你的静态分析仪可能会发现这是一个无法保证的弱结构。尝试删除多余的括号:
<TD> <%=Server.HTMLEncode(rs("hse_desc"))%> </TD>
&#34;差评验&#34;问题是指无法正确HTML编码的输出代码。某些语言和框架不支持正确的编码。所以咨询意见是说在这些情况下你应该验证输入,而不是输出编码。例如,如果用户输入的是电话号码,则应确保电话号码仅使用列入白名单的字符(例如说0
至9
和-#()
),并确保这些是输入来自其他地方时输出的唯一字符。
但是,在你的情况下,我认为这不适用。