Heartbleed:震惊互联网世界的计算机错误是编码人员错误的结果。Internet Explorer 的零日漏洞也是如此。这些漏洞的巨大影响,尤其是 Heartbleed 是有目共睹的……问题又出现了,关于开发人员遵循的安全协议。仅仅是部分开发人员的粗心大意吗?或者我们是否在制造很多色彩并为无法控制的事情哭泣?我们将与您分享7大网站安全错误列表,如果程序员避免这些错误,可以避免许多不眠之夜。没有任何不可告人的意图,我们将称它们为:
编码员应遵循的 7 条诫命:
1) 相信你的开发者伙伴……永远不要!
众所周知,应用程序通常是使用由其他编码人员编写的专有代码或第三方软件构建的。您可能想相信它们是安全的并且不包含任何漏洞,并且不会再考虑两次检查它们是否存在安全漏洞。虽然您将花时间保护您构建的应用程序,但过去的漏洞最终仍然使您的应用程序可被利用。
因此,开发人员需要做的是,要么尝试从头开始编写代码(等一下,不要挂我们!),要么确保您打算使用的第三方软件遵循 OWASP/行业标准的最新指南。如果您有第三方软件的源代码,则必须对其进行静态和动态分析。
2) 你应该禁止硬编码密码
您正在编写代码,进行了一些测试并且有很多事情要做,忘记删除硬编码的密码......我的意思是,这可以理解,对吗?有“n”件事情要做,你忘记删除一些硬编码的密码会有多大的影响。你没有注意到它,所以还有谁会……对吧?也许没有人会。
或者也许有人可能!
2011 年,一名安全研究人员在西门子工业控制系统中发现了一个硬编码密码,该密码可以让攻击者使用恶意命令对系统进行重新编程,从而破坏关键基础设施,甚至锁定合法管理员。硬编码对程序员来说很容易……但如果以后有必要的话,就更难改变了。如果一个人在所有软件中使用相同的密码并且被恶意元素发现,那么每个客户都会变得容易受到攻击,并且由于难以修复,因此可以长期感受到影响。
您可以让其他程序员或团队审查您的代码,以确保代码中不存在硬编码密码。
3)您不得保留后门帐户
不要在您的代码中保留后门管理帐户开户。你可能会说你把它留在那里并忘记了它……但你不能这样说来摆脱你的责任。你认为没有人会找到它,但总会有人找到。
谷歌前首席执行官兼现任董事长埃里克施密特曾说过:“如果你有不想让任何人知道的事情,也许你一开始就不应该这样做。”
因此,如果您不希望人们知道您的后门条目,请不要一开始就将它们留在那里。
许多公司被指控在其应用程序中保留后门条目。苹果是最新加入名单的公司,被指控在大约 6 亿台 iOS 设备中故意安装安全后门,这可能导致用户所有敏感数据的访问。您永远不知道会发现隐藏门的人将是朋友还是敌人,并希望没有人会对您的应用程序或其安全功能感兴趣,这是相当轻率的。
4) 你应该履行你的职责并检查所有输入
确保您的输入有效。不要信任所有输入并允许所需的最低权限。对包含用户名的内容非常严格。例如,如果您希望输入数字,请不要输入字母。黑客可以通过以意想不到的方式修改输入来利用不正确的输入验证。您可以做的另一件事是在将所有输入用作输出时对其进行 HTML 编码。输出编码不足是大多数基于注入的攻击的基础。
SQL 注入连续两次位居 OWASP 前 10 名漏洞之首。它是周围最危险的安全漏洞之一,最近的大多数违规行为都归因于它。不要盲目相信来自外部来源的输入,例如基于 Web 的输入。这样提交的 SQL 查询可以被利用来执行不希望的操作。可以理解,编码人员无法检查每个数据输入,这可能非常耗时,但这是他们本质上必须做的。代码就像你的软件的一扇门,无论多么累,编码员都有责任确保只有有效的输入被传入。
5) 您不得放弃保护您的数据的义务
在讨论了输入处理的主题之后,我们转向数据安全。SANS Institute 列出的 25 个最危险的编程错误和 OWASP Web应用程序安全问题 Top 10,安全数据分别排在第 8位和第 6位。
编码人员应该比他们认为应该更频繁地使用加密。尤其是在当今时代,当用户的个人信息包含极其敏感的细节时,如财务数据、身份数据等等。尽管在所有可能的地方使用加密,对我们来说似乎是一件轻而易举的事,但由于它在整个过程中增加了一个步骤的非常明显的原因,它仍然没有被突出使用。与加密相比,在纯文本中查找错误要容易得多,但出于同样的原因,加密是必要的。我们不希望我们的数据以银盘形式交给黑客……而加密可以防止这种情况发生。正确实施的加密有助于保持数据的安全。
6) 尊重你为之构建代码的人——不要忽视第 8 层
您可能会考虑所有因素,但仍然失败,因为您忘记考虑最重要的因素……将成为最终用户的人。我们并不是说程序员应该在这里受到指责。用户有自己的想法……你可能会说些什么,但对他们来说,这可能意味着完全不同的东西。
你问,编码人员可以对此做些什么。很多!像最终用户一样思考,看看为用户准备的错误消息和提示是否像你想象的那样清晰。不要假设用户总是能理解你的意思。当他们试图改变他们不应该做的事情时,你会给他们一个警告信息吗?大多数时候,您认为不言自明的命令对用户来说毫无意义!
7)你应该建造适当的墙,只授权那些认为必要的东西
编码员很难进行适当的控制。控制过多,软件用户会感到窒息。太少了,他们就会陷入困境……他们希望你保护他们。因此,他们希望获得门控安全的所有优势,但不想订阅随之而来的安全标准。许多用户倾向于绕过基本的安全措施,以至于他们坚持使用默认凭据,除非被迫更改它们。
而你,编码员总是会考虑给用户多少皮带。如果你让事情变得困难,用户会抱怨并使软件对用户不友好……你让用户变得容易,行动对攻击者来说是回报的。
分离少数操作,例如需要财务数据输入的操作,可能是一种出路。这里有一个双因素身份验证解决了不允许黑客有机会利用松懈的安全措施的目的。
例如,在使用信用卡付款的应用程序中,您是否要将信用卡号码存储在现金中,甚至存储在服务器上?与信用卡关联的姓名和地址呢?CVV号?从严格的安全角度来看,这里的关键组件是哪些?这里的权衡是对用户的便利性而不是安全性。