公共使命与指导方针

安全编码实践指南

探索安全编码规范以理解并缓解软件漏洞(如OWASP十大漏洞),并通过引导式培训任务在真实应用程序模拟环境中进行实践。

学习背景

探索所有任务

查看更多
提高生产力
SQL注入
我们收到用户报告称,其发现某网上银行解决方案的交易查询功能存在SQL注入漏洞。 该用户声称能够查看其他用户的交易记录,并指出此漏洞可能使攻击者在数据库中实施各类破坏性操作,包括删除表、查看其他表数据、插入数据等。请尝试在本任务中复现该用户的操作。
提高生产力
Spring MVC 请求匹配器
2023年3月,Spring发布了针对内部发现的漏洞CVE-2023-20860的修复方案。该漏洞涉及在MVCRequestMatchers中使用双通配符**时,可能导致Spring Security与Spring MVC的模式匹配出现偏差,最终可能使用户获得对特定端点的未经授权访问权限。 我们创建了一个仅含少量终端的极简银行应用程序。请按照说明操作,尝试复现此访问控制漏洞的影响。
提高生产力
心理签名:利用已知脆弱组件
CVE-333321449拥有最酷的漏洞别名——Java中的"心灵感应签名"。这个名称从何而来?它源自《神秘博士》中的心灵感应文件。当这些空白纸张展示给他人时,人们会看到自己期待的景象。 Java(15至18版)实现的ECDSA算法中出现了类似现象,这影响了JWT签名的验证机制。我们可发送无效签名,但Java会将其判定为有效。想看看具体原理吗?让我们开始吧。
提高生产力
Apache路径遍历:利用已知漏洞组件
2021年10月4日,Apache团队发布了Apache 2.4.49版本,以修复Apache 2.4.48中存在的路径越界与远程代码执行漏洞(即CVE-2021-41773)。 2021年10月7日,由于2.4.50版本的修复不完整,团队发布了2.4.51版本。该漏洞被记录为CVE-2021-42013。请尝试此任务,亲自验证该漏洞的利用方式。
提高生产力
Log4j:已知漏洞组件的使用
2021年12月初,广受欢迎的日志库Log4j曝出0day漏洞(CVE-2021-44228),在Java社区引发轰动。 该漏洞被命名为Log4Shell,影响Log4j v2的2.0-beta9至2.14.1版本,可能导致远程代码执行。我们已搭建模拟环境,助您亲身体验其危害程度。立即尝试。
提高生产力
特洛伊木马来源:使用来自不可信来源的组件
维京银行的一位开发人员曾天真地从互联网上的不可信来源复制代码——该代码可能包含漏洞组件——以协助编写管理信用卡的行政授权验证程序。我们发现用户竟能修改信用卡额度,而此特权本应仅限管理员使用。我们认为该代码存在问题。请尝试执行代码调查任务。
提高生产力
Codestashbin - 不安全的密码重置功能
CodeStashBin 是全球最大的代码版本控制托管公司之一。有传言称其密码遗忘流程存在缺陷,密码重置功能存在安全漏洞。攻击者可能借此修改特权用户的密码并入侵其账户。请参与本次任务,深入调查该问题。
提高生产力
跨站脚本攻击(XSS)在'ChatterGPT'中
此任务展示了某款流行大型语言模型的熟悉界面,并使用了2023年11月底生成的真实代码片段。用户可解读该片段,并研究若按预期用途使用时可能引发的安全问题。

查看所有指南

浏览:
隐藏筛选条件
选拔
显示筛选条件
选拔
清除筛选条件
标签
超级图标 [★]
主题
查看更多

登记与监督不足

最佳实践:

敏感功能的审计日志记录
错误日志记录
日志存储于集中化位置
在规定时间内保留日志
定期审计个人身份信息(PII)日志

记录与监督往往是事后才想到的补救措施,但实际上,未能确保实施适当的记录与监督可能代价高昂。 一方面,当事件发生时(无论是否涉及安全),记录缺失或不足将导致真相无从查证。另一方面,过度记录又可能引发隐私问题,进而招致监管机构的质疑。请参阅我们的最佳实践指南,避免出现记录与监控不足的情况。

查看指南

使用存在已知漏洞的组件

{
«dependencias»: {
«foo»: «1.0.0 - 2.9999.9999",
«barra»: «>=1.0.2 <2.1.2»
}
}

大多数应用程序都大量使用第三方组件。这些组件提供了从日志记录、模板创建、数据库访问到更多功能的各类服务。这极大简化了软件开发流程并节省了大量时间。但它们同样由人类开发,这意味着其中必然存在安全漏洞。阅读指南以获取更多信息。

查看指南

SQL注入

import mysql.connector
db = mysql.connector.connect(
)实践 #Bad. 避免这样做!这仅用于学习。
(host="localhost", user="newuser", passwd="pass", db="sample")
cur = db.cursor()
name = raw_input('输入姓名: ')
cur.execute("SELECT * FROM sample_data WHERE Name = '%s';" % name) for row in cur.fetchall(): print(row)
db.close()

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

查看指南

安全配置错误

许多框架还提供可启用的端点集,用于监控应用程序,无论是在生产环境还是测试/开发环境中。这些端点可能包括:

指标(Prometheus)
日志
环境信息
路由/URL映射

安全配置错误是一个泛指术语,涵盖因应用程序配置设置而非代码错误而产生的常见漏洞。这是一个非常广泛的主题,很大程度上取决于您所使用的技术等因素。 解决这类问题看似简单——可能只需修改配置文件甚至单行代码——但其影响与后果却可能极其严重。请阅读我们的指南,深入了解此类漏洞及其缓解措施。

查看指南

服务器端申请伪造

ts
let url = request.params.url;

let response = http.get(url);
let render = response.render();

return 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 version="1.0" ?>
<!DOCTYPE outerElement [
   <!ENTITY externalEntity SYSTEM  "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>

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

查看指南

注射:轨迹路径

falso
let BaseFolder = «/var/www/api/documents/»;
let path = baseFolder + request.params.filename;

devuelve el archivo.read (ruta);

路径遍历是另一种相当常见的注入漏洞类型。通常发生在URI构造(无论是URL、文件路径还是其他类型)未能充分确保完全解析的路径不会指向目标路径根目录之外时。 路径穿越漏洞的影响程度很大程度上取决于漏洞出现的具体场景以及系统整体加固程度。阅读指南以获取更多信息。

查看指南

身份验证与授权

cs

//Asegúrese de que el comportamiento predeterminado es autenticar las solicitudes y comprobar si son de administrador
[Autenticar]
[Autorizar («Administrador»)]
clase pública SecureController: Controller
{

}

clase pública MyController: SecureController
{

//Anula el atributo Authorize heredado para permitir que cualquier usuario acceda a la página

查看指南

注入 - XSS

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

跨站脚本攻击(Cross-Site Scripting,简称XSS)是另一种注入型漏洞,会导致攻击者控制的脚本在其他用户的浏览器中执行。XSS也可视为HTML/JavaScript注入漏洞。下面我们来了解可能遇到的XSS类型。

查看指南

注射101

常见的注入类型包括:

SQL注入
跨站脚本注入(HTML/Javascript注入)
路径穿越(路径/URL注入)
命令注入
代码注入

最广为人知的漏洞类型之一通常是注入漏洞,尤其令人毫不意外的是其无可争议的代表——SQL注入。在技术领域,几乎不可能不听到关于SQL注入的讨论,因此我们现在就来探讨这个话题。请继续阅读,了解关于注入缺陷的简要介绍。

查看指南

文件上传

cadena pública Cargar imagen de perfil (archivo de formulario archivo subido)
{
//Generar la ruta para guardar el archivo subido en
var path = $». /uploads/avatars/ {request.user.id}/{UploadedFile.filename}»;

//Guarda el archivo
var localFile = archivo.openWrite (ruta);
LocalFile.write (UploadedFile.readToEnd ());
archivo local.flush ();
local.close file ();

//Actualiza la imagen de perfil
UserProfile.UpdateImagen de perfil de usuario (request.user, ruta)

ruta de regreso;
}

应用程序在运行过程中,通常需要允许用户在某个环节上传文件(无论是用于使用还是仅存储)。虽然看似简单,但该功能的实现方式至关重要——因为文件上传的管理方式可能带来诸多潜在风险。阅读指南以获取更多信息。

查看指南

命令注入

let ip = request.params.ipAddress;

sistema(«ping" + ip);

让我们单独探讨命令注入。我们将重点关注几个不同的示例,以便更直观地了解其运作机制。因此,作为快速回顾:当用户输入包含操作系统命令的片段时,就会引发命令注入漏洞。阅读指南以获取更多信息。

查看指南