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

Posted

技术标签:

【中文标题】经典 ASP :: 跨站点脚本 (XSS) 验证不良问题【英文标题】:Classic ASP :: Cross-Site Scripting (XSS) Poor Validation Issue 【发布时间】:2015-08-15 21:01:45 【问题描述】:

对于传统的经典 ASP 应用程序,我应该删除所有安全攻击问题。目前,DB 包含已经编码的数据,不会有更多的插入/更新操作。从现在开始只选择操作。

我能够删除 SQL 注入和其他一些安全问题,但是无法删除

跨站脚本 (XSS):验证不佳问题

这成为项目交付的瓶颈。

谁能帮帮我。

示例: 我在数据库中的数据如下。

单细胞样本数据(韩文和英文字符)

1..&nbsp;Rupture&nbsp;disc&nbsp;설치&nbsp;관련&nbsp;필요&nbsp;자재&nbsp;List<BR>──────────────────────────────────────<BR>&nbsp;&nbsp;&nbsp;No 필요&nbsp;자재 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;재질 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;비&nbsp;고 <BR>──────────────────────────────────────<BR>&nbsp;&nbsp;&nbsp;1 inlet&nbsp;isolation&nbsp;valve,&nbsp;8" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hast&nbsp;C276 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;기존&nbsp;재고&nbsp;사용 <BR>&nbsp;&nbsp;&nbsp;2 RD&nbsp;holder&nbsp;inlet/outlet &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hast&nbsp;C276&nbsp;/&nbsp;316L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;신규&nbsp;구매 <BR>&nbsp;&nbsp;&nbsp;3 Rupture&nbsp;Disc &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hast&nbsp;C276 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;신규&nbsp;구매 <BR>&nbsp;&nbsp;&nbsp;4 SV&nbsp;outlet&nbsp;isolation&nbsp;valve,&nbsp;10"&nbsp;&nbsp;&nbsp;SUS&nbsp;316L &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;신규&nbsp;구매 <BR>──────────────────────────────────────<BR><BR>2.&nbsp;Rupture&nbsp;Disc&nbsp;Specification<BR>&nbsp;&nbsp;1)&nbsp;Rupture&nbsp;design&nbsp;press  :&nbsp;4kg/cm2<BR>&nbsp;&nbsp;2)&nbsp;Design&nbsp;temperature  :&nbsp;100℃<BR>&nbsp;&nbsp;3)&nbsp;Rupture&nbsp;press&nbsp;tolerance&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;±&nbsp;5%<BR>&nbsp;&nbsp;4)&nbsp;Manufacturing&nbsp;range  :&nbsp;+&nbsp;0%,&nbsp;&nbsp;&nbsp;-&nbsp;10%<BR>&nbsp;&nbsp;5)&nbsp;Material&nbsp;spec   :&nbsp;M1,&nbsp;M4,&nbsp;C31<BR>&nbsp;&nbsp;6)&nbsp;Max.&nbsp;allowable&nbsp;oper&nbsp;press &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;3.2kg/cm2&nbsp;(at&nbsp;100℃)<BR><BR>3.&nbsp;Rupture&nbsp;Disc&nbsp;spec&nbsp;선정&nbsp;기준<BR>&nbsp;&nbsp;.&nbsp;Code,&nbsp;&nbsp;Standard&nbsp;=&nbsp;API&nbsp;520,&nbsp;&nbsp;ASME&nbsp;VIII<BR>&nbsp;&nbsp;.&nbsp;Required&nbsp;Burst&nbsp;Pressure&nbsp;=&nbsp;Vessel&nbsp;Design&nbsp;Pressure<BR>&nbsp;&nbsp;.&nbsp;Manufacturing&nbsp;range(+0%&nbsp;∼&nbsp;-10%)&nbsp;of&nbsp;Required&nbsp;Burst&nbsp;Pressure<BR>&nbsp;&nbsp;.&nbsp;Rupture&nbsp;Pressure&nbsp;Tolerance&nbsp;+5%,&nbsp;-5%&nbsp;of&nbsp;Stamped&nbsp;Burst&nbsp;Pressure<BR>&nbsp;&nbsp;.&nbsp;Specified&nbsp;Disc&nbsp;Temperature&nbsp;=&nbsp;Actual&nbsp;Temperature&nbsp;of&nbsp;Disc&nbsp;in&nbsp;Operation&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;→&nbsp;usually&nbsp;lower&nbsp;at&nbsp;disc&nbsp;than&nbsp;in&nbsp;liquid&nbsp;phase&nbsp;of&nbsp;vessel&nbsp;&nbsp;<BR><BR>4.&nbsp;Rupture&nbsp;Disk&nbsp;전단&nbsp;및&nbsp;SV2209&nbsp;후단&nbsp;Isolation&nbsp;valve는&nbsp;CSO(CAR&nbsp;SEAL&nbsp;OPEN)&nbsp;.<BR><BR>5.&nbsp;Rupture&nbsp;Disk&nbsp;후단에&nbsp;PG2209를&nbsp;설치하여&nbsp;운전&nbsp;중&nbsp;Rupture&nbsp;disk&nbsp;파손&nbsp;여부&nbsp;확인&nbsp;가능토록&nbsp;함.<BR>

我在单元格数据上方显示如下:

示例页面:

<!-- #include file="INCLUDES/htmlDecode.inc" -->
.
.
.
<HTML>
.
.
.
sampledata = rs("sampledata")
.
.
.
<TD><%= ClearForAttack(sampledata) =%></TD>
.
.
.
</HTML>

以上函数定义如下:

用户定义函数:

    <%
    Function HTMLDecode(sText)
        Dim I
        sText = Replace(sText, "&quot;", Chr(34))
        sText = Replace(sText, "&lt;"  , Chr(60))
        sText = Replace(sText, "&gt;"  , Chr(62))
        sText = Replace(sText, "&amp;" , Chr(38))
        sText = Replace(sText, "&nbsp;", Chr(32))
        For I = 1 to 255
            sText = Replace(sText, "&#" & I & ";", Chr(I))
        Next
        HTMLDecode = sText
    End Function
    %>
    <%
    Function ClearForAttack(pStrValue)
        if len(pStrValue)>0 then
            pStrValue = HTMLDecode(Server.HTMLEncode(pStrValue))
            pStrValue = replace(pStrValue,"'","")
            pStrValue = replace(pStrValue,"`","")
            pStrValue = replace(pStrValue,"%","")
            pStrValue = replace(pStrValue,"<","&lt;")
            pStrValue = replace(pStrValue,">","&gt;")
        else
            pStrValue = ""
        end if
        ClearForAttack = pStrValue
    End Function
    %>

为了显示已经编码的数据,我同时使用了 HTMLDecode 和 HTMLEncode 函数

编辑函数或建议我另一种方法。

我们非常感谢您的帮助或建议。

提前致谢。

【问题讨论】:

简单地清理发布/查询字符串数据。您可以尝试多种方法,包括Server.HTMLEncode 您对哪个 XSS 变体有疑问? 如前所述,XSS:验证不佳 @kpgu1718 - 这就是你的答案 - owasp.org/index.php/… 我不得不问 - 你为什么要解码编码版本?保持原样,然后输出到您的页面。 【参考方案1】:

如上所述,只需清理发布/查询字符串数据来自用户输入和数据库的所有数据。您可以尝试多种方法,包括Server.HTMLEncode

如果您需要扩展它以覆盖数据库字段,那么您将需要对&amp;lt;&amp;gt; 执行某种搜索和替换,分别用&amp;lt;&amp;gt; 替换它们。

XSS 存在一些问题。你可能想read this first。

【讨论】:

感谢您的帮助。但是,我很抱歉。我已经尝试过这些方法,但不起作用。 您是否尝试过HTMLEncode 处理来自您数据库的数据? 在 S.O. 上查看this post 再次感谢您的快速回复。我的问题是,如果我直接显示 O/P 它会给出 XSS:Peristent 并且如果我使用 Server.HTMLEncode("") 它会给出 XSS : Poor Validation 问题。所以,现在我正在尝试删除这个 Pood 验证问题。 尝试将字符串中的所有字符替换为它们的 &amp;#xNN; 等效字符。它有点带和大括号,但可能有用。并不是说这会对性能产生影响。【参考方案2】:

Server.HTMLEncode 净化查询。您需要运行一个验证过程来满足糟糕的验证。有一个简单的“黑名单”程序,您可以根据自己的需要进行更改。检查http://blogs.iis.net/nazim/filtering-sql-injection-from-classic-asp 或Validation for Form and QueryString in ASP Classic using Regex. Almost working but missing something?。合并后,应删除大部分不良验证。

【讨论】:

一些带有解释的例子会很棒。

以上是关于经典 ASP :: 跨站点脚本 (XSS) 验证不良问题的主要内容,如果未能解决你的问题,请参考以下文章

通过 URL 进行跨站点脚本

PortSwigger 跨站点脚本(XSS)

如何修复JSP表达式标记中的跨站点脚本(XSS)

如何修复 Veracode - 跨站点脚本 - CWE ID 80 - 基本 XSS - 在 .each 函数中使用 $(item)

playframework 1.x 是不是处理跨站点脚本 (xss)?

XSS- 跨站点脚本:DOM 问题