2009-07-19 51 views
3

个人而言,我尝试编写安全的ASP.NET代码。然而,我曾经为注册服务机构工作(高欺诈目标),所以我对写的代码变得十分偏执。是否有任何ASP.NET功能我应该仔细审查(除了SQL访问 - 我知道不要做动态SQL)。哪些ASP.NET命令可能导致不安全的代码?

回答

4

这是一个很好的MSDN文章:Security Practices: ASP.NET 2.0 Security Practices at a Glance

摘录:

如何防止跨站脚本

验证输入和输出编码。 通过验证输入的类型,长度,格式和范围来限制输入。使用 的HttpUtility.HtmlEncode方法 编码输出,如果它包含来自用户的输入 ,诸如从形式 字段,查询字符串和饼干或从其他来源 ,如数据库的输入。 不要只是将输入回送给用户 而不验证和/或编码 数据。以下示例显示如何编码一个表单字段 。

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" /> 
+0

感谢米奇!我很感谢您的回应,但是...您给出的回复让我相信这是针对非转义SQL或非DB驱动代码的一种对策。原因是它都是基于用户输入的存储。 此外,根据我的经验,URLEncoding往往会“过度编码”,因为它必须订阅URL编码规则(非常严格)。 此外,与ASP.NET我尝试避免任何Response.Writes。我发现ASP.NET代码infront控件为我的HTML提供了更好的结构意识。 虽然我会给你+1,因为你仍然在技术上有效:) – Thunder3 2009-07-19 03:15:08

1

决不相信用户的输入。永远不要假设客户端验证可以防止错误的输入数据。始终确保您的web.config中的ValidateRequest =“true”和EnableEventValidation =“true”:

请参阅Request ValidationASP.NET Security Tutorials

相关问题