Cod*_*odo 6 .net java asp.net security web-applications
我们计划构建一个需要高度安全的Web应用程序,因为大量的资金和声誉都存在风险.因此,我正在寻找有助于这项工作的工具和技术.这些工具和技术应该有助于防止SQL注入,跨站点脚本漏洞,远程代码执行等问题.
我们的团队对这些漏洞有扎实的了解.但是每个开发人员都会犯错误,而一个简单的错误不应该导致安全漏洞.应该通过Web应用程序框架,应用程序服务器,编程语言,安全库,代码分析器等来防止或检测它们.
一个简单的例子:如果您将数据插入HTML,则需要对其进行转义,以便正确显示并且不会因注入脚本而被滥用.一些Web应用程序框架会给开发人员带来负担.如果他们忘记在一个地方逃跑,他们就会遇到安全问题.一个好的工具不仅可以自动进行转义,甚至可以防止开发人员强行执行.
我不是在寻找有关防火墙的建议(我们有一个好的),强化操作系统(这是计划的一部分),使用加密通信(这将是唯一的选择)和安全认证(硬件令牌将使用).相反,建议应以应用程序服务器和要构建的Web应用程序软件为中心.
我们也完全理解编写安全软件不仅仅是技术:它涉及知识渊博的人,管理层的关注,时间和金钱以及软件质量流程.到目前为止,这不是问题,也不是这个问题的焦点.
我应该提一下,我们对Java和.NET有一定的偏见.
那么您可以向我们推荐哪些工具和技术或其组合?
ide*_*ide 13
您提到的漏洞都源于数据与控件(或代码,如果您愿意)的混淆.它们在实践中出现,因为许多编程语言和API不能编码特定于域的语言(如SQL,HTML和系统shell)的语义.例如,几乎所有的XSS漏洞都会发生,因为程序员打印出一个未经过清理的字符串,并且编程语言或API没有足够的信息来检测该字符串是否是用户提交的,并且应该将其控制字符转义.幸运的是,有语言扩展和API将数据与控制分开,几乎可以消除所有这些攻击.
许多防止XSS攻击的技术在精神上与防御SQL注入相似.只有这一次,目标是Web浏览器而不是数据库.无论哪种方式,我们都不希望将数据错误地解释为控件.
关于这个话题,我没有太多话要说,但尽量尽量减少system()类似的呼叫.如果您必须拨打其他二进制文件,请应用良好的安全措施,例如尽可能使用白名单,并在适当情况下使用经过严格审查的清理功能.一些API,比如Python的Popen,可以很好地确保参数不被视为shell控制字符.最后,使用Java和C#,缓冲区溢出漏洞的可能性极小.这不是一个正式的保证,但数十亿美元的公司一直在运行Java服务器.
最终,您应该考虑使用为手头任务设计的API或语言功能,无论是创建SQL查询还是构建HTML页面.这些语言和API不仅增加了您对安全性的信心,而且通常也有助于编程.与连接一堆字符串的老派策略相比,我们现在拥有LINQ和XML文字,可以说代码更容易编写,更易于阅读,也更容易验证.我是语言增强和API的粉丝,可以提高代码质量和程序员的工作效率!