ASP.NET MVC安全清单

and*_*ter 19 security asp.net-mvc

有吨的有关设计和安全发展(甚至在SO一堆职位)好论文,但他们似乎专注于什么,你应该做的.

然而,我所追求的是一个像黑客一样的思维清单.完成开发后应该完成的简单操作列表,以确保解决方案的安全性.

(更新:我最感兴趣的是黑盒清单 - "去一个页面,试试这个和那个"的东西,但白盒清单也可能是有意义的.)


这是我到目前为止所提出的:

安全黑盒清单

  • 提交不正确/恶意数据(这里的示例?)以确保输入通过javascript验证类型,长度,格式和范围.
  • 关闭客户端验证并重复上述步骤,以确保这一点
    • 你不仅要检查javascript,还要在服务器端验证
    • 输入在服务器上验证类型,长度,格式和范围
    • 自由形式输入被消毒
    • 包含输入的输出用HtmlEncode和编码UrlEncode
  • 在查询字符串中插入极大量的数据,http://www.example.com/foo?bar=HugeAmountOfData以确保约束输入并进行边界检查.
  • 通过GET访问POST操作,以确保"表单提交"操作仅限于POST.
  • 如果适用,请上传大小/格式不正确的文件(大文件,空文件,带有重命名扩展名的可执行文件等),以确保正常处理上传.
  • (如何从UI检查?)确保绝对URL用于导航.
  • 以没有正确权限的用户身份访问URL,以确保通过操作/控制器属性显式地测试权限.
  • 访问提供不存在详细信息的URL(如不存在的产品ID,您无权访问的项目等),以确保返回正确的错误(404或403等).
  • 通过HTTP访问敏感页面,以确保它仅通过HTTPS可用.

安全白盒清单

Web层.

  • 在调试模式下,中断代码以便抛出异常,以确保它安全失败.确保捕获异常并记录详细消息,但不要将信息泄露给客户端.
  • 如果适用,请确保MVC操作仅限于POST/GET,特定用户角色,还有其他任何内容?.
  • 确保POST操作附带[ValidateAntiForgeryToken]属性以防止跨站点请求伪造攻击.
  • 确保Response.Write(直接或间接)永远不会用于显示用户输入.
  • 确保未在查询字符串或表单字段中传递敏感数据.
  • 确保您的安全决策不依赖于HTTP标头信息.

服务层.

  • 在调试模式下,中断代码以便抛出异常,以确保它安全失败.确保捕获异常并记录详细消息,但不要将信息泄露给客户端.
  • 确保在更新数据库中的任何内容时,您在事务中操作.

数据库层.

  • 确保检索存储过程不使用,SELECT *但始终明确指定列列表.
  • 确保更新/删除存储过程在事务(通过@@TRANCOUNT等)中运行并显式提交/回滚它.

评论?更正?缺少步骤?

使其成为社区维基,您可以随意编辑.

小智 4

添加到列表:

黑色:DoS 攻击 - 使用tinyget 或类似工具来模拟DoS 攻击,看看您的应用程序会做什么。

黑色:规范化攻击。提到一点,可能要特别关注下载情况下的目录遍历攻击。

White:使用 cookie 来获取敏感信息?请参阅 cookie 不用于敏感数据,并且不会在预期的时间间隔内保留在本地。黑色:在临时 IE/XYZ 文件夹中嗅探 cookie。

Black:同样,使用脚本化的tinyget或手动尝试查看暴力密码猜测是否有效,或者您的应用程序是否具有针对密码猜测攻击的智能延迟/拒绝功能。

黑色:进行任何攻击,看看管理员是否会自动收到攻击通知,还是只有攻击者知道。

“确保您的安全决策不依赖于 HTTP 标头信息” - http 标头用于 ntml/kerberos 身份验证?可能只是不要愚蠢地使用它们,不要发明或依赖引用等?

一般:使用商业黑/白盒安全扫描仪,可能很昂贵,但否则很难进行安全回归测试。