在我启用对新网站的访问之前,应该采取哪些措施来确保其安全且“生产就绪”?
到目前为止,我有以下内容:
<customErrors mode="RemoteOnly" />
我目前的技术堆栈是IIS7&amp; ASP.Net MVC3。
我确定我忘了或不知道很多其他物品。有什么建议吗?
答案 0 :(得分:3)
防止sql注入。使用存储过程或参数化的sql语句。您可以使用动态sql - 但要非常小心,如果这样做 - 请确保使用参数化查询,并且不要通过附加变量来形成sql语句“inline”。
通过确保使用Html.AntiForgeryToken
确保关闭跟踪
确保打开自定义错误,以便向客户显示黄色死亡屏幕(即错误详情)。
通过在您的aspx页面上使用&lt;%:syntax并在您的mvc 3上使用简单的@XXXX,确保您在模型,数据库等系统中显示的任何输出都是通过编码来防止跨站点脚本编写的。页面,因为mvc3编码所有BY DEFAULT,这是对过去方法的一个很大的改进。
确保您的数据库中没有测试帐户。
确保只能通过查询字符串执行任何操作 - 例如传入/ MyApp / DeleteUser / 10。需要帖子来执行操作,这些帖子必须在您的控制器上使用Html.AntiForgeryToken和[ValidateAntiForgeryToken]
确保页面上任何编辑信息的用户都无法编辑(使用fiddler等工具)隐藏在页面上的主键,从而更改他们回发更改时正在编辑的记录。您可以将页面上的CustomerId哈希显示为隐藏字段,并在post上进行比较,以确保它与模型中的匹配。
下个月在亚特兰大的技术部门访问我的安全讲话:)
答案 1 :(得分:1)
如果您使用的是ELMAH,请确保对elmah.axd处理程序的访问是安全的而不是打开的。否则,您将为潜在的黑客提供有价值的信息。
确保您的网络服务器完全是最新的补丁程序,并在MS提供时自动下载/安装它们。很多网站都没有应用这些网站,并且已经开始使用。
确保您网站中的动态sql为零;或者,绝对至少一切都是通过参数化查询处理的。沿着这些方向,确保数据库用户凭据被锁定,以便它只具有您实际需要的功能(提示:dbo级别不合适)。
确保用户完成的每一位数据输入都已正确转义,以便在显示时不会导致跨站点脚本问题。基本上,进行全面的安全审核。如果这很重要,可以聘请外部公司来做这件事。
答案 2 :(得分:0)
首先想到的是搜索引擎优化(SEO)。使用MS的SEO Toolkit开始。
答案 3 :(得分:0)
要添加上述内容,我总是运行免费工具Xenu(http://home.snafu.de/tilman/xenulink.html#Description)来检查链接是否损坏。即使您使用其他工具,也可以提供出色的双重检查。
考虑在具有适当权限的每个子文件夹中放置web.config。例如,如果所有图像都保存在文件夹\ images中,那么该文件夹不应该能够提供ASCX文件,只能提供具有适当图像扩展名的文件。
当您找不到页面时,您是否正在做一些用户友好的事情,例如将用户重定向到搜索页面?自定义错误页面可以大大提高网站的可用性。
您可能希望拥有robots.txt文件和自定义图标,这些项目经常被忽略。