对于那些不知道的人来说,OWASP的前十名是一个常见的(Web)应用程序安全问题列表,这些问题在信息安全社区中经常被提及。如果你正在申请这个行业的职位,招聘启事上列出的要求之一往往是“熟悉OWASP前十名”,你可以期待在求职面试中被问及这些问题。
我一开始想把这篇文章写成一本容易理解的入门读物,里面有十大名胜的清晰例子。在做研究和审阅列表时,我发现我不一定同意他们对漏洞的细分和组织,我认为它也许可以简化和现代化。
具体地说,我在#2、#3、#5和#6点之间看到了一些冗余;有些可能不应该有专门的位置,比如#4(XML外部实体);另外还有一些似乎缺失或轻描淡写的东西。至少,看起来对事情有一些不同的看法的空间。
因此,我没有写入门读物,而是制作了我自己的列表版本,以三个高级别区域的形式涵盖,每个区域都有一个具体威胁的列表,以及它们下面的缓解步骤。
我相信这种方法是一种实际可行的方法,可以作为一个检查表,以确保一个人的基础得到覆盖。即使你不会在求职面试中被问到罗列他们的琐碎问题,当被问到你会采取什么方法时,他们会帮助你给出一个更全面的答案,说明你将如何保护一个网站。也许你可以这样说给面试官留下深刻印象:“当然,我知道前十名,但你听说过Dawe的三名吗?”(暂定标题)。一个人可以做梦。
这是一个广泛的类别-它涵盖OWASP#1、#4、#7、#8,以及一些额外的问题。输入有多种形式(包括文字表单提交),是用户与应用程序交互的主要方式。恶意用户输入(通常以代码注入或文件交互的形式)很可能是针对Web应用程序最常被利用的攻击载体。
在这个标题下有许多类型的攻击,但它们都遵循相同的模式:未经清理、意外或处理不当的输入会导致系统做一些它不想做的事情,结果是负面的。以下是常见问题的列表,可以作为进一步研究的起点(只需在谷歌上搜索引用的感兴趣的项目):
提供给应用程序明显部分的输入,如输入元素、表单和URL参数(GET和POST变量),这些参数包含恶意代码片段,然后在目标系统上或由使用该服务的客户端执行。
SQL注入:通过用户提供的输入操作数据库查询,以提取或篡改站点的数据库。
跨站点脚本(XSS)系列:将客户端代码(如HTML元素和JavaScript)添加到站点,然后由访问者执行,通常是为了直接窃取他们的信息或诱使他们放弃信息,或者代表他们触发操作。
这些很容易被忽视,因为利用路径不那么明显。这些攻击不是向站点提供简单的恶意输入,而是嵌入到标记、编码数据或其他更隐蔽的交互区域中。这些类型的攻击可能会导致底层系统的较低级别的危害,因为涉及的操作通常比简单的用户输入更可信,因此执行的代码可能会造成很大的破坏。
(非)序列化:客户端和服务器之间或服务之间传递的复杂(非原始)数据通常被序列化(“打包”和“解包”),以便于传输。由于数据(尤其是序列化形式的数据)对人类来说是不可读的,因此经常被视为潜在的攻击载体而被忽视。恶意输入和指令可以隐藏在序列化数据中,然后在反序列化时处理和执行。
XML/JSON攻击:与上面的观点类似,XML和JSON(Web语言)可以被攻击者操纵以实现他们的目标。这些格式的功能也可能被以意想不到的方式利用-它们不仅仅是愚蠢的数据包装器。OWASP将整个要点(#4)专门用于与XML相关的XXE攻击,我个人认为这是一个非常边缘的考虑因素,不一定值得专门讨论,但作为一个整体,必须考虑这些类型的攻击。当心可能会发生的事.。
Cookie、会话数据和HTTP标头:这些都是由客户端和服务器处理的输入形式,因此充当了额外的攻击载体,尽管这是一种晦涩难懂且很少见效的攻击载体。在解析过程中请牢记这一点。
文件(和文件访问请求)是另一种可能对应用程序构成重大威胁的输入类型。滥用存储和检索功能可能导致系统完全受损或其内容泄露。
目录遍历:在提供文件检索的应用程序中,特别是