【发布时间】:2009-07-19 03:01:07
【问题描述】:
就个人而言,我尝试编写安全的 ASP.NET 代码。然而,我对自己编写的代码变得非常偏执,因为我曾经为注册商工作(高欺诈目标)。有没有我应该仔细检查的 ASP.NET 函数(除了 SQL 访问 - 我知道不做动态 SQL)。
【问题讨论】:
就个人而言,我尝试编写安全的 ASP.NET 代码。然而,我对自己编写的代码变得非常偏执,因为我曾经为注册商工作(高欺诈目标)。有没有我应该仔细检查的 ASP.NET 函数(除了 SQL 访问 - 我知道不做动态 SQL)。
【问题讨论】:
这是一篇出色的 MSDN 文章:Security Practices: ASP.NET 2.0 Security Practices at a Glance。
摘录:
如何防止跨站脚本
验证输入并编码输出。 通过验证输入来约束输入 类型、长度、格式和范围。采用 HttpUtility.HtmlEncode 方法 如果包含输入,则编码输出 来自用户,例如来自表单的输入 字段、查询字符串和 cookie 或 来自其他来源,例如数据库。 永远不要只是将输入回显给用户 无需验证和/或编码 数据。下面的例子展示了如何 对表单字段进行编码。
Response.Write(HttpUtility.HtmlEncode(Request.Form["name"]));如果您返回的 URL 字符串包含 输入到客户端,使用 HttpUtility.UrlEncode 方法进行编码 这些 URL 字符串,如此处所示。
Response.Write(HttpUtility.UrlEncode(urlString));如果您有需要接受的页面 一系列 HTML 元素,例如 通过某种富文本输入 字段,您必须禁用 ASP.NET 请求验证页面。
打开自定义错误以保持错误的私密性
<customErrors mode="On" defaultRedirect="YourErrorPage.htm" />
【讨论】:
永远不要相信用户输入。永远不要假设客户端验证会阻止错误的输入数据。始终确保 web.config 中的 ValidateRequest="true" 和 EnableEventValidation="true" :
【讨论】: