经典 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.. Rupture disc 설치 관련 필요 자재 List<BR>──────────────────────────────────────<BR> No 필요 자재 재질 비 고 <BR>──────────────────────────────────────<BR> 1 inlet isolation valve, 8" Hast C276 기존 재고 사용 <BR> 2 RD holder inlet/outlet Hast C276 / 316L 신규 구매 <BR> 3 Rupture Disc Hast C276 신규 구매 <BR> 4 SV outlet isolation valve, 10" SUS 316L 신규 구매 <BR>──────────────────────────────────────<BR><BR>2. Rupture Disc Specification<BR> 1) Rupture design press : 4kg/cm2<BR> 2) Design temperature : 100℃<BR> 3) Rupture press tolerance : ± 5%<BR> 4) Manufacturing range : + 0%, - 10%<BR> 5) Material spec : M1, M4, C31<BR> 6) Max. allowable oper press : 3.2kg/cm2 (at 100℃)<BR><BR>3. Rupture Disc spec 선정 기준<BR> . Code, Standard = API 520, ASME VIII<BR> . Required Burst Pressure = Vessel Design Pressure<BR> . Manufacturing range(+0% ∼ -10%) of Required Burst Pressure<BR> . Rupture Pressure Tolerance +5%, -5% of Stamped Burst Pressure<BR> . Specified Disc Temperature = Actual Temperature of Disc in Operation <BR> → usually lower at disc than in liquid phase of vessel <BR><BR>4. Rupture Disk 전단 및 SV2209 후단 Isolation valve는 CSO(CAR SEAL OPEN) .<BR><BR>5. Rupture Disk 후단에 PG2209를 설치하여 운전 중 Rupture disk 파손 여부 확인 가능토록 함.<BR>
我在单元格数据上方显示如下:
示例页面:
<!-- #include file="INCLUDES/htmlDecode.inc" -->
.
.
.
<HTML>
.
.
.
sampledata = rs("sampledata")
.
.
.
<TD><%= ClearForAttack(sampledata) =%></TD>
.
.
.
</HTML>
以上函数定义如下:
用户定义函数:
<%
Function HTMLDecode(sText)
Dim I
sText = Replace(sText, """, Chr(34))
sText = Replace(sText, "<" , Chr(60))
sText = Replace(sText, ">" , Chr(62))
sText = Replace(sText, "&" , Chr(38))
sText = Replace(sText, " ", 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,"<","<")
pStrValue = replace(pStrValue,">",">")
else
pStrValue = ""
end if
ClearForAttack = pStrValue
End Function
%>
为了显示已经编码的数据,我同时使用了 HTMLDecode 和 HTMLEncode 函数
请编辑函数或建议我另一种方法。
我们非常感谢您的帮助或建议。
提前致谢。
【问题讨论】:
简单地清理发布/查询字符串数据。您可以尝试多种方法,包括Server.HTMLEncode
。
您对哪个 XSS 变体有疑问?
如前所述,XSS:验证不佳
@kpgu1718 - 这就是你的答案 - owasp.org/index.php/…
我不得不问 - 你为什么要解码编码版本?保持原样,然后输出到您的页面。
【参考方案1】:
如上所述,只需清理发布/查询字符串数据来自用户输入和数据库的所有数据。您可以尝试多种方法,包括Server.HTMLEncode
。
如果您需要扩展它以覆盖数据库字段,那么您将需要对&lt;
和&gt;
执行某种搜索和替换,分别用&lt;
和&gt;
替换它们。
XSS 存在一些问题。你可能想read this first。
【讨论】:
感谢您的帮助。但是,我很抱歉。我已经尝试过这些方法,但不起作用。 您是否尝试过HTMLEncode
处理来自您数据库的数据?
在 S.O. 上查看this post
再次感谢您的快速回复。我的问题是,如果我直接显示 O/P 它会给出 XSS:Peristent 并且如果我使用 Server.HTMLEncode("") 它会给出 XSS : Poor Validation 问题。所以,现在我正在尝试删除这个 Pood 验证问题。
尝试将字符串中的所有字符替换为它们的 &#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) 验证不良问题的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 Veracode - 跨站点脚本 - CWE ID 80 - 基本 XSS - 在 .each 函数中使用 $(item)