有很多关于设计和开发安全性的好文章(甚至是关于SO的一堆帖子),但所有这些文章似乎都集中在你应该做的 上。
然而,我所追求的是一个像黑客一样的思维清单。完成开发后应该完成的简单操作列表,以确保解决方案的安全性。
(更新:我最感兴趣的是黑盒清单 - “转到某个页面,试试这个和那个”类似的东西,但白盒清单也可能会引起关注。)< / EM>
到目前为止,我已经提出了这个问题:
HtmlEncode
和UrlEncode
http://www.example.com/foo?bar=HugeAmountOfData
在查询字符串中插入极大量的数据,以确保约束输入并进行边界检查。网络层。
[ValidateAntiForgeryToken]
属性,以防止跨站点请求伪造攻击。 Response.Write
(直接或间接)永远不会用于显示用户输入。服务层。
数据库层。
SELECT *
,但始终明确指定列列表。@@TRANCOUNT
等)并显式提交/回滚。评论?更正?缺少步骤?
将其制作社区维基,随意编辑。
答案 0 :(得分:4)
主要坚持MVC特定的东西:
<%:
和MvcHtmlString
。JsonRequestBehavior.AllowGet
的所有用途,以确保它无法返回数组。robots.txt
答案 1 :(得分:4)
要添加到列表中:
黑色:DoS攻击 - 使用tinyget或类似模拟DoS攻击,查看您的应用程序的功能。
黑色:规范化攻击。提到了一点,可能是特别关注可以在目录遍历攻击的情况下下载。
白色:使用Cookie来处理敏感信息?请参阅cookie不用于敏感数据,并且不会在意图间隔内本地保留。 黑色:在IE的临时IE / XYZ文件夹中嗅探。
黑色:再次,使用脚本微小或手动尝试查看暴力密码猜测是否有效,或者您的应用是否有智能延迟/拒绝密码猜测攻击。
黑色:执行任何攻击并查看是否自动通知管理员攻击,或者只有攻击者才知道攻击。
“确保您的安全决策不依赖于HTTP标头信息” - http标头用于ntml / kerberos身份验证?可能只是不要愚蠢地使用它们,不发明或依赖引用者等?
概述:使用商用黑/白盒安全扫描仪,价格昂贵,但很难进行安全性回归测试。
答案 2 :(得分:1)
在每个请求(GET或POST或其他请求)上验证用户凭据,以确认用户身份验证
检查每个敏感操作的用户授权(检查身份验证后)
注意输出缓存,尤其是在您实施自己的会员制
答案 3 :(得分:1)
确保您不要盲目地将表单数据绑定到模型,方法是始终使用TryUpdateModel<T>
而不是TryUpdateModel
。