Public missions & guidelines

Secure Coding Made Practical

Explore secure coding guidelines to understand and mitigate software vulnerabilities like the OWASP Top 10, and dive into guided training Missions to practices in real-world app simulations.

book a demo

Browse all missions

查看更多
可扩展且引人入胜

SQL 注入

try now
可扩展且引人入胜

Spring MvcRequestMatchers

try now
可扩展且引人入胜

心理签名-使用已知的易受攻击组件

try now
可扩展且引人入胜

Apache 路径遍历-使用已知的易受攻击的组件

try now
可扩展且引人入胜

Log4j-使用已知的易受攻击的组件

try now
可扩展且引人入胜

特洛伊木马来源-使用来自不可信来源的组件

try now
可扩展且引人入胜

Codestashbin-不安全的密码重置功能

try now
可扩展且引人入胜

Cross-site scripting (XSS) in ‘ChatterGPT’

try now

Browse all guidelines

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

记录和监控不足

最佳实践:

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

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

view guidelines

使用存在已知漏洞的组件

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

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

view guidelines

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 语句中,以攻击应用程序并从应用程序收集重要信息。这是一个网络安全漏洞。这是操纵数据库并从中提取关键信息的最常见的黑客技术。

view guidelines

安全配置错误

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

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

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

view guidelines

服务器端请求伪造

ts
让 url = request.params.url;

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

返回 render.export ();

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

view guidelines

密码存储

Feature Cryptographic hash Password hash Speed Very fast Intentionally slow Work factor can be adjusted No Yes

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

view guidelines

批量分配

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参数自动绑定到模型上,然后无需任何验证即可使用该模型。使用从请求到对象的自动绑定有时会非常有用,但是如果模型的属性不允许用户访问,也会导致安全问题。阅读指南了解更多详情。

view guidelines

安全配置错误-XXE 详解

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

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

view guidelines

注入-路径遍历


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

返回文件.read(路径);

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

view guidelines

身份验证和授权

cs

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

}

公共类 myController:安全控制器
{

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

view guidelines

注入-XSS

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

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

view guidelines

注射 101

Some of the most common injection types include:

SQL Injection
Cross-Site Scripting (HTML/Javascript injection)
Path Traversal (Path/Url injection)
Command Injection
Code Injection

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

view guidelines

文件上传

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

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

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

返回路径;
}

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

view guidelines

命中注入

let ip = request.params.IPAddress;

系统(“ping” + ip);

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

view guidelines