经典 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,"<","&lt;")
 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 的空格字符和带有 & 的 & 字符 使用该功能后,是否需要像 或者直接使用 就够了。 以上情况我该怎么办。你能帮帮我吗? 【参考方案3】:

我认为这可能是误报。你的代码

<TD> <% =(Server.HTMLEncode(rs("hse_desc")))%> </TD>

将解决任何 XSS 问题(只要您只为 HTML 输出而不是 javascript 这样做)。

我认为您的静态分析器可能会发现这是一些无法保护的弱结构。尝试删除多余的括号:

<TD> <%=Server.HTMLEncode(rs("hse_desc"))%> </TD>

“验证不良”问题是指无法正确进行 HTML 编码的输出代码。某些语言和框架不支持正确的编码。所以建议说,在这些情况下,您应该验证输入,而不是对输出进行编码。例如,如果用户正在输入电话号码,您应该确保电话号码仅使用列入白名单的字符(例如,09-#())并确保这些是唯一输出的字符如果您的输入来自其他地方。

但是,在你的情况下,我认为这并不适用。

【讨论】:

感谢您的回答。基本上,我的写作方式如下。 为什么因为,当我使用 Server.HTMLEncode("") 时,只有所有的空格,都无法显示正确地在 HTML 页面中。 其中,HTMLDecode 函数定义为, 正如你所说,是的,现在我只在这个项目中包含显示来自数据库的信息的页面。我的意思是除了 Select 操作之外,没有插入、删除、更新操作。 @kpgu1718:听起来您的数据库数据已经在某些地方进行了 HTML 编码。像这样在同一个函数调用中解码和编码没有什么意义。 是的,它是编码的。但是为了绕过安全问题,我正在使用 Server.HTMLEncode("") 并正确显示我正在使用 HTMLDecode("") 函数。

以上是关于经典 ASP 跨站脚本的主要内容,如果未能解决你的问题,请参考以下文章

经典 ASP :: 跨站点脚本 (XSS) 验证不良问题

xss (Cross Site Scripting)跨站脚本攻击

用shell脚本批量进行xss跨站攻击请求

CSRF与SSRF

CSRF与SSRF

跨站脚本攻击都有哪些类型