经典 ASP 跨站脚本
Posted
技术标签:
【中文标题】经典 ASP 跨站脚本【英文标题】:Classic ASP Cross-Site Scripting 【发布时间】:2015-08-04 07:20:08 【问题描述】:我是 Web 开发的新手,现在我也需要从事经典的 ASP 项目。主要议程是消除旧代码的安全问题,而不是开发新东西。
最初,我遇到了很多 SQL 注入问题。我使用参数查询成功地删除了 SQL 注入。但是,一旦相同的代码显示跨站点脚本:持久问题。然后,我使用了Server.htmlEncode("")
。即使它成功地消除了这个问题。但是,现在它显示为 Cross-Site Scripting:Poor Validation 问题。
跨站脚本:持久
<TD> <% =rs("hse_desc")%> </TD>
跨站点脚本:验证不佳
<TD> <% =(Server.HTMLEncode(rs("hse_desc")))%> </TD>
谁能帮我解决这个问题。
【问题讨论】:
我的客户公司将使用他们的内部软件来检查安全问题。我不知道有关该软件的任何详细信息。另外,让我问一个问题,我能不能得到那种软件来检查自己并一次又一次地审查代码。 将逻辑添加到您的 asp 表单代码中,用于检查引用域,如果域未列入白名单,则拒绝提交。 用于检查漏洞的工具应该提供更详细的“验证不良问题”,以及如何解决它的信息,否则它不是很有用。 【参考方案1】:这只是说你的编码器很弱:
http://www.hpenterprisesecurity.com/vulncat/en/vulncat/java/cross_site_scripting_poor_validation.html
您使用的是什么静态代码分析器?
*请从 Classic ASP 中尖叫。真的没有办法保护它。恕我直言
【讨论】:
【参考方案2】:您是否在代码中直接使用了 。 如果此数据直接跨站发送,则属于漏洞,任何人都可以在此代码中注入数据。
您必须将此数据设置为新变量并使用这样的函数保护它
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 是一个明确的值,可以在代码中的任何地方使用
【讨论】:
它与 Server.HTMLEncode("") 有何不同。如果我将此数据设置为新变量并调用上述函数,它将删除所有类型的跨站点脚本攻击。 (验证性差,持久性和反射性) server.HTMLEncode 只是一种纠正空格字符的方法,例如带有 %20 的空格字符和带有 & 的 & 字符 使用该功能后,是否需要像我认为这可能是误报。你的代码
<TD> <% =(Server.HTMLEncode(rs("hse_desc")))%> </TD>
将解决任何 XSS 问题(只要您只为 HTML 输出而不是 javascript 这样做)。
我认为您的静态分析器可能会发现这是一些无法保护的弱结构。尝试删除多余的括号:
<TD> <%=Server.HTMLEncode(rs("hse_desc"))%> </TD>
“验证不良”问题是指无法正确进行 HTML 编码的输出代码。某些语言和框架不支持正确的编码。所以建议说,在这些情况下,您应该验证输入,而不是对输出进行编码。例如,如果用户正在输入电话号码,您应该确保电话号码仅使用列入白名单的字符(例如,0
到 9
和 -#()
)并确保这些是唯一输出的字符如果您的输入来自其他地方。
但是,在你的情况下,我认为这并不适用。
【讨论】:
感谢您的回答。基本上,我的写作方式如下。以上是关于经典 ASP 跨站脚本的主要内容,如果未能解决你的问题,请参考以下文章