我必须在工作中更新旧项目。虽然我熟悉php脚本,但我对经典asp没有任何经验。
谢谢!
答案 0 :(得分:9)
是的,您可以在经典ASP中使用参数化查询(更准确地说,是经典的ADO)。
这是link。
至于编码输出,我可能想要为最新的Microsoft Anti-XSS库创建一个包装器,并使用Server.CreateObject调用它。我在这类事情上远非专家,因为我在.Net上花了更多的时间,所以我只觉得这会有效。
Server.HTMLEncode真的不够好,因为它只会将一些编码字符列入黑名单。 Anti-XSS库更好,因为它将可接受的内容列入白名单。
答案 1 :(得分:7)
始终使用Server.HTMLEncode来清理用户输入。
例如,如果您要从表单文本框设置变量:
firstName = Server.HTMLEncode(trim(request.form(“firstname”)))
答案 2 :(得分:2)
注意SQL注入。不要将用户输入连接到SQL字符串,然后执行它。相反,始终使用参数化查询。
答案 3 :(得分:1)
有许多以Is开头的函数,例如IsNumber
,IsArray
等,可能会引起人们的兴趣。此外,如果您期望一个整数,您可以使用CLng(Request("blabla"))
来获取它,因此如果它不是整数,则CLng函数将引发错误。
答案 4 :(得分:1)
执行此操作的一种方法可能是在header.asp
文件中添加一个检查,该文件遍历Request
对象以查找不适当的字符。例如:
<%
for each x in Request.Form ' Do this for Request.Querystring also
If InStr(x,"<") <> 0 Then
' encode the value or redirect to error page?
End If
next
%>
答案 5 :(得分:0)
只需创建一个函数,即可在每次要输出字符串时调用。它将对html进行编码并将其输出为文本。例如。转义html。
FUNCTION esc(a)
esc= Server.HTMLEncode(a)
END FUNCTION
variable = esc("<img src="https://i.imgur.com/eatOKWw.png">");
Response.Write variable
输出:<img src="https://i.imgur.com/eatOKWw.png">