我在编写内部Intranet应用程序方面有很多经验,但在编写面向公众的Web应用程序时,很少有人会尝试恶意攻击。
该应用程序是用MVC.net,JQuery和Subsonic编写的。
我可以采取哪些步骤来投射我的应用程序,使其合理预测?
我已经做了一些事情:
对于查看我的表单的html源并查看表单发布内容的人,并且使用此手动创建具有不同值的表单帖子来执行操作时,他们一直非常偏执。这个偏执狂是否有充分根据我需要在使用HttpVerb GET和POST归属的动作上执行此操作还是只需要GET?
我是否需要担心使用ORM进行SQL注入?
答案 0 :(得分:3)
检查所有控制器操作的授权,包括GET和POST。不是为会话授权,而是再次为每个请求授权。
服务器验证是必须的。还在数据库级别上强制执行一些数据完整性。一旦发现某些异常情况就会失败。不要试图恢复和处理所有可能的场景以取悦用户。
不要依赖用户识别,例如存储在Cookie中的用户名。它可以被替换。添加更多和独特的东西。 Cookie也可能被盗并转移到另一台PC。考虑选择检查IP地址(例如)以确保您不被欺骗。
限制每个时间单位的用户操作量。不允许在一分钟内提交100个。
所有用户输入都必须进行清理。是的,担心SQL注入。
不要以纯文本格式存储密码。哈希他们。如果有人闯入您的系统,他们可以通过假设用户使用相同的密码来访问他的电子邮件帐户,银行系统等来滥用密码。
另一个好主意可能是不使用公开昵称,电子邮件或公开的其他名称作为登录名。允许用户使用登录名执行登录操作,并使用其他名称在网站上公开表示。
实际上,看看这个帖子。它对这种知识有很好的总结。
What should a developer know before building a public web site?
答案 1 :(得分:1)
有很多考虑因素。与往常一样,这将是一项正在进行的工作。
答案 2 :(得分:1)
建立面向公众的网站时,偏执狂是你的朋友。
您的Cookie是否已加密?通过自定义HttpModule很容易实现。这是普通SSL的基础。
是的,你需要担心sql注入。并非所有ORM都是平等的。我们最近在LINQ的某些条件下发现了sql注入问题。不要相信任何为您编写查询的内容。
如果这涉及敏感信息,请添加代码以防止重播攻击。基本上,假设某人离开您的服务器将被捕获。
答案 3 :(得分:0)
答案 4 :(得分:0)
答案 5 :(得分:0)
清理客户端发送的任何输入 您。 POST / GET数据可能是 最容易伪造,但绝对是 不是全部。
不要单独依赖JavaScript 任何安全措施,因为可以 就像被轻易绕过一样。
确保您拥有安全的政策 用于密码恢复(例如,不是 只是一个“秘密问题”)
有某种蛮力保护,例如CAPTCHA
答案 6 :(得分:0)
您对安全性有多严重?
出于安全考虑,存在RFC标准。
http://www.faqs.org/rfcs/rfc3552.html
贯穿它(42页或那里)。它包含大多数安全注意事项在创建新RFC时,您将使用本文档指导您完成注意事项。