公共使命和指导方针

安全编码变得实用

探索安全编码指南,了解和缓解诸如 OWASP Top 10 之类的软件漏洞,并深入学习指导性培训任务,在现实世界应用程序模拟中进行练习。

学习背景

浏览所有任务

查看更多
提高生产力
SQL注入
我们收到一位用户的报告,称他们能够利用互联网银行解决方案交易搜索功能中的SQL注入漏洞。他们表示,他们能够查看属于其他用户的交易,并指出该漏洞可能允许攻击者对数据库做各种令人讨厌的事情,例如删除表、查看其他表中的数据、插入数据等。试试复制用户在这次任务中所做的事情。
提高生产力
Spring MvcRequestMatchers
2023 年 3 月,Spring 发布了针对内部部件的名义为 CVE-2023-20860 的漏洞修复程序,在该漏洞中,在 mvcRequestMatchers 中使用双通配符 ** 可能 Spring Security 和 Spring MVC 之间的不匹配。这最终可能导致用户未经修改的权限访问某些端点。我们已经推出了一个带几个端点的非常简化的银行应用程序。如上所述,进行操作工作,尝试重现此访问控制漏洞的影响。
提高生产力
心理签名-使用已知的易受攻击组件
CVE-2022-21449 有漏洞最酷的别名,即 Java 中的心理签名。它是怎么得这个名字的?它引用了《神秘博士》的通灵论文。当向某人展示时,这些空白的纸张将填满他们期望看到的内容。ECDSA算法的Java(版本15至18)实现中也发生了类似的情况,它对JWT的签名验证产生了影响。我们可以提交无效的签名,但是 Java 会认为它是有效的。想看看它是如何工作的?让我们开始吧。
提高生产力
Apache 路径遍历-使用已知的易受攻击的组件
2021 年 10 月 4 日,Apache 团队发布了 Apache 的 2.4.49 版本,以解决 Apache 2.4.48(也称为 CVE-2021-41773)中的路径遍历和远程代码执行漏洞。2021 年 10 月 7 日,他们发布了 2.4.51 版,原因是 2.4.50 修补程序中的修复尚未完成。该漏洞被追踪为 CVE-2021-42013。试试这个任务,亲眼看看如何利用这个漏洞。
提高生产力
Log4j-使用已知的易受攻击的组件
2021 年 12 月初宣布在非常受欢迎的日志库 Log4j 中进行为期 0 天的漏洞 (CVE-2021-44228),这在 Java 社区中大放异彩。这个名为 Log4Shell 的漏洞会影响 Log4j v2 版本 2.0-beta9 至 2.14.1,并可能导致远程代码执行。我们已经设置了一个模拟漏洞利用的环境,因此您可以亲眼目睹其影响。现在就试试吧。
提高生产力
特洛伊木马来源-使用来自不可信来源的组件
我们的一位维京银行开发人员天真地从互联网上不受信任的来源复制了一些代码,这些代码可能包含漏洞组件,以帮助编写管理员授权支票来管理信用卡。我们注意到用户一直在更改其信用卡额度,尽管只有管理员才有此权限。我们认为这段代码有问题。试试任务来调查代码。
提高生产力
Codestashbin-不安全的密码重置功能
CodeStashBin是世界上最大的代码版本控制托管公司之一。有传言说,忘记密码过程存在缺陷,存在不安全的密码重置功能漏洞。可能可以更改特权用户的密码并获得其帐户的访问权限。跳入这个任务来调查这个问题。
提高生产力
ChatterGPT 中的跨站脚本 (XSS)
该任务揭示了一种流行的 LLM 的熟悉界面,并使用了 2023 年 11 月底生成的真实代码片段。用户可以解读该代码片段,并调查如果将其用于预期目的,是否存在任何潜在的安全隐患。

浏览所有指南

按以下方式浏览:
隐藏过滤器
选拔
显示过滤器
选拔
清除筛选条件
标签
超级图标 [★]
话题
查看更多

记录和监控不足

最佳实践:

敏感功能的审计日志
错误记录
将日志存储在集中的位置
在规定的时间内保留日志
定期审计 PII 日志

当出现问题时,记录和监控通常是事后才想到的,但实际上,未能确保进行适当的日志记录和监控可能会付出非常昂贵的代价。在一个极端情况下,当事件发生时(无论是否与安全有关),很少或根本没有日志都无法弄清楚实际发生了什么。在另一个极端,记录过多的数据会导致隐私问题,进而导致监管机构出现问题。阅读我们的最佳实践指南,以避免记录和监控不足。

查看指南

使用存在已知漏洞的组件

{
“依赖关系”:{
“foo”: “1.0.0-2.9999.9999”,
“bar”: “>=1.0.2 <2.1.2"
}
}

大多数应用程序都使用大量的第三方组件。这些组件提供从日志、模板化、数据库访问等所有内容。这使开发软件变得更加容易并节省了大量时间。但是它们也是由人制造的,这意味着有些漏洞不可避免地会包含漏洞。阅读指南以了解更多信息。

查看指南

SQL注入

导入 mysql 连接器
db = mysql.connector.conn
#Bad 练习。避免这种情况!这只是为了学习。
(host= “localhost”,user= “新用户”,passwd= “pass”,db= “样本”)
cur = db.cursor ()
name = raw_input ('输入名称:')
cur.execute(“从 sample_data 中选择 * 其中 Name = '%s';”% name)为 cur.fetchall () 中的行:打印(行)
db.close ()

SQL 注入 (SQLi) 将代码注入到 SQL 语句中,以攻击应用程序并从应用程序收集重要信息。这是一个网络安全漏洞。这是操纵数据库并从中提取关键信息的最常见的黑客技术。

查看指南

安全配置错误

许多框架还具有一组可以启用的端点,无论是在生产环境还是在测试/开发环境中,都可以监控应用程序。这些可能包括:

指标(普罗米修斯)
日志
环境信息
路径/网址映射

安全配置错误在某种程度上是一个总称,它涵盖了由于应用程序配置设置而不是错误代码而起作用的常见漏洞。这是一个范围广泛的话题,它在很大程度上取决于您的技术堆栈等因素。通常,解决这些问题看起来很简单,例如更改配置文件甚至一行代码,但是这些漏洞的影响和后果可能很严重。阅读我们的指南,详细了解此漏洞及其缓解方法。

查看指南

服务器端请求伪造

ts
让 url = request.params.url;

让响应 = http.get (url);
let render = response.render ();

返回 render.export ();

当用户能够使应用程序向攻击者确定的域发出 HTTP 请求时,就会出现服务器端请求伪造漏洞。如果应用程序可以访问私有/内部网络,则攻击者还可能导致该应用程序向内部服务器发出请求。我们将通过一些例子来仔细研究这个问题,以更好地理解本指南中的实际情况。

查看指南

密码存储

功能 加密哈希值 密码哈希值 速度 非常快 故意慢 工作系数可调整 否 是

如果你的应用程序对用户进行身份验证,它很可能还会处理密码。处理用户密码确实是一件大事,而恰当处理它们则是一件大事。很难想象会有比应用程序受到攻击和用户密码通过互联网泄露让所有人看到更糟糕的情况。如何根据最佳实践安全地存储密码?让我们来看看几种方法。

查看指南

批量分配

html
<form method="POST">
<input name="Id" type="hidden" value="666">
<input name="Name" type="text" value="Bad guy">
<input name="EmailAddress" type="text" value="hacker@attacker.com">
<input name="IsAdmin" type="hidden" value="true">
<input type="submit">
</form>

批量分配是一个漏洞,其中 API 端点不限制用户可以修改其关联对象的哪些属性。当使用库/框架时,可能会出现此漏洞,该库/框架允许将HTTP参数自动绑定到模型上,然后无需任何验证即可使用该模型。使用从请求到对象的自动绑定有时会非常有用,但是如果模型的属性不允许用户访问,也会导致安全问题。阅读指南了解更多详情。

查看指南

安全配置错误-XXE 详解

xml
<?xml 版本= “1.0”?>
<!DOCTYPE 外部元素 [
<!实体外部实体系统 “文件:///etc/passwd” >] >
<outerElement>&ExternalEntity;</outerElement>

“XML 外部实体” (XXE) 漏洞类别是涉及 XML 解析器的安全配置错误。XML 标准包括引用 “实体” 的方式,例如文件和 URL。解析器通常默认完全解析外部实体,这意味着 XML 文档可能导致文件和其他敏感信息泄露给潜在的攻击者。阅读完整指南以获取更多信息。

查看指南

注入-路径遍历


让 baseFolder = “/var/www/api/documents/”;
let 路径 = 基本文件夹 + request.params.filename;

返回文件.read(路径);

路径遍历是另一种非常常见的注入漏洞类型。当构建 URI(无论是 URL、文件路径还是其他)无法正确确保完全解析的路径不指向预期路径的根目录之外时,它们往往会发生。路径遍历漏洞的影响在很大程度上取决于遍历发生的环境以及所做的总体强化。阅读指南以了解更多信息。

查看指南

身份验证和授权

cs

//确保默认行为是对请求进行身份验证,并检查它们是否是管理员
[身份验证]
[授权(“管理员”)]
公共类 SecureController:控制器
{

}

公共类 myController:安全控制器
{

//覆盖继承的 Authorize 属性以允许任何用户访问该页面

查看指南

注入-XSS

``html
<!---UNSAFE: The htmlSnippet will get interpreted without any escaping--->
@Html .Raw (HtmlSnippet)
```

跨站脚本(也称为 XSS)是另一种注入漏洞,它会导致在其他用户的浏览器中评估攻击者控制的脚本。XSS 也可以被视为 HTML/JavaScript 注入漏洞。让我们来看看你可以遇到的 XSS 类型。

查看指南

注射 101

最常见的注入类型包括:

SQL 注入
跨站脚本(HTML/JavaScript 注入)
路径遍历(路径/Url 注入)
命令注入
代码注入

最著名的漏洞类别之一往往是注入漏洞,尤其是无可争议的榜样:SQL 注入,也就不足为奇了。在科技界很难避免听到有关 SQL 注入的消息,所以我们只想谈一谈。请继续阅读以简要介绍注射缺陷。

查看指南

文件上传

公共字符串 uploadProfilePicture(表单文件上传文件)
{
//生成保存上传文件的路径
变量路径 = $”。/uploads/avatars/ {request.user.ID}/{UploadedFile.file.fileName}”;

//保存文件
var localFile = file.openWrite(路径);
localfile.Write (UploadedFile.readToEnd ());
localfile.flush ();
localfile.close ();

//更新头像
Userprofile.updateUserProfilePicture(请求用户,路径)

返回路径;
}

在某个时候,应用程序需要允许用户将文件(用于使用或仅用于存储)上传应用程序中的某个位置,这种情况很常见。虽然看起来很简单,但由于与处理文件上传的方式相关的潜在风险,该功能的实现方式可能非常关键。阅读指南以获取更多信息。

查看指南

命中注入

let ip = request.params.IPAddress;

系统(“ping” + ip);

让我们来看看命中注视本身。我们主要将关注几个不同的示例示例,这样可以更容易地看到实际的例子。因为这里,简要回顾一下,当用户输入使用操作系统命名令的一部分时,就会出现命中注入漏洞。阅读指南以获取更多信息。

查看指南