我们希望在初学者的ASP.NET安全书中看到什么
这是我自己的书的无耻信息收集练习。
我在社区中进行的演讲之一是对网站漏洞的介绍。通常,在演讲期间,我可以看到至少有两位观众脸色苍白。这是基本的东西,跨站点脚本,SQL注入,信息泄漏,跨站点表单请求等等。
因此,如果我们可以回想起一个人,那么作为一个新手Web开发人员(无论是否为ASP.NET),我们会觉得与Web安全以及如何安全地进行开发有关的有用信息是什么?我已经涵盖了OWASP十大热门话题
(是的,这意味着如果有人提出我尚未想到的内容,stackoverflow将在确认列表中!)
现在已经完成并发布了,谢谢大家的回复
解决方案
防御性编程作为一个原型主题,涵盖了所有特定的攻击,因为大多数(如果不是全部)攻击是由于缺乏足够的防御性思维引起的。
使该主题成为这本书的中心栏目。那时,对我有用的是了解一种永不信任任何事物的技术,而不仅仅是停止技巧,例如"在输入中不允许SQL注释或者特殊字符"。
我想早点学到的另一件有趣的事情是如何实际测试它们。
首先,我将以某种方式指出网络的不安全性,使其对那些考虑到安全性发展(不幸的是)可能是一个新概念的人们而言是可访问的。例如,向他们展示如何拦截HTTP标头并实施XSS攻击。我们想向他们展示攻击的原因是让他们自己对自己的防御有一个更好的了解。谈论安全性还不止于此,但如果不了解他们想要阻止的攻击类型,他们将很难准确地"测试"其系统的安全性。一旦他们可以通过尝试拦截消息,欺骗标头等来测试安全性,那么他们至少会知道他们尝试实现的任何安全性是否有效。我们可以教他们用什么方法来放心地实现该安全性,知道他们是否弄错了,他们实际上会知道,因为它将使我们无法尝试显示的安全性测试失败。
狐狸
我认为所有漏洞都是基于程序员的不思考,暂时的判断失误或者他们未曾想到的东西。我负责"修复"应用程序中的一个大漏洞是,当登录的用户是管理员时,他们从身份验证方法返回了0(零)。由于该变量最初被初始化为0,因此如果发生任何问题(例如数据库关闭),则会引发该异常。永远不要将变量设置为正确的"安全代码",然后用户将对该站点具有管理员访问权限。绝对可怕的想法进入了这个过程。因此,这使我有了一个主要的安全概念。切勿将代表"安全级别"或者任何此类变量的变量的初始值设置为代表该站点的完全控制权的初始值。更好的是,使用现有的库,这些库长期以来一直在大量生产环境中使用。
我想看看ASP.NET安全性与ASP Classic安全性有何不同。
很高兴得知我们将获得OWASP十强。为什么不同时介绍SANS / CWE前25个编程错误。
我总是尝试在可能出错的地方显示最坏的情况。例如,关于跨站点脚本注入如何像黑盒攻击一样工作,甚至可以在黑客无法访问的应用程序页面上运行,甚至SQL注入如何像黑盒一样工作,以及黑客如何窃取敏感业务数据,即使网站使用普通的非特权登录帐户连接到数据库也是如此。
如何确保安全方法可通过SQL Server进行扩展。特别是如何避免SQL Server序列化来自多个用户的请求,因为它们都使用相同的ID连接...