ASP 站点最常被攻击的两类漏洞就是 SQL 注入与 XSS。前者源于把用户输入直接拼进 SQL,后者源于把不可信内容直接输出。把过滤逻辑收敛成两个函数并强制使用,是低成本的基础防护。
实现思路
SqlSafe 把输入中的单引号全部翻倍,使输入无法闭合 SQL 语句;HtmlSafe 基于 Server.HTMLEncode 转义尖括号与引号。取参、写 SQL、输出三步全部走这两个函数。
完整代码
<%@ Language="VBScript" CodePage=65001 %>
<%
Option Explicit
Rem SQL 注入过滤:把单引号翻倍
Function SqlSafe(v)
If IsNull(v) Or v = "" Then
SqlSafe = ""
Else
SqlSafe = Replace(CStr(v), "'", "''" )
End If
End Function
Rem 输出过滤:HTML 特殊字符编码
Function HtmlSafe(v)
HtmlSafe = Server.HTMLEncode(CStr(v))
End Function
Rem 使用示例
Dim kw, uid
kw = SqlSafe(Request("keyword"))
uid = SqlSafe(Request("uid"))
Response.Write HtmlSafe(kw)
Response.Write HtmlSafe(uid)
%>说明与边界
- 数字型参数建议再加 IsNumeric 校验,否则仍可能被绕过;
- 翻倍法只是基础防护,凡是可预编译的场景都应优先用 ADO Command 参数化;
- HtmlSafe 用于正文外的输出,富文本内容请按白名单标签过滤。
小结
输入防注入、输出防 XSS,两条线都封住后老站点的常见漏洞面就大幅缩小,改造时重点排查历史代码里直接拼接 Request 的位置。
评论(0)
暂无评论,快来抢沙发吧~