
应用安全【免费下载链接】CheatSheetSeriesThe OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics.项目地址https://gitcode.com/gh_mirrors/ch/CheatSheetSeries点击查看免费下载导读本文以 OWASP CheatSheetSeries 仓库中的 IndexProactiveControls.md 为核心索引系统梳理 OWASP Top Ten Proactive Controls 2018 的十个主动安全控制C1–C10并逐一映射到本仓库对应的实战 Cheat Sheet 文档。读完本文你将掌握每个主动控制的核心技术要求、对应的具体防御文档与可复制的代码示例能够把定义安全需求、安全访问数据库、校验所有输入、实现数字身份、强制访问控制等十条主动控制直接落地到自己的软件开发生命周期SDLC中。什么是 OWASP Top Ten Proactive ControlsOWASP Top Ten Proactive Controls 2018 是一份应该被纳入每一个软件开发项目的安全技术清单按重要性排序编号 1 的控制最为重要。它的定位与 OWASP Top 10十大风险互补Top 10 描述的是哪些环节会出问题而 Proactive Controls 回答的是开发阶段应该主动做哪些事情来避免这些问题。IndexProactiveControls.md 的核心价值在于它把每个主动控制映射到本仓库中对应的 Cheat Sheet 文档让开发者可以按控制逐项查阅详细的防御方案、代码示例与配置清单。该映射关系的来源与背景可参见 OWASP Top Ten Proactive Controls 2018 官方项目。十个控制整体脉络如下编号主动控制核心目标C1Define Security Requirements在需求阶段定义可验证的安全需求C2Leverage Security Frameworks and Libraries复用经过验证的安全框架与库C3Secure Database Access安全访问数据库参数化查询C4Encode and Escape Data对所有输出做编码与转义C5Validate All Inputs校验一切输入C6Implement Digital Identity正确实现认证、会话与身份管理C7Enforce Access Controls强制访问控制C8Protect Data Everywhere全生命周期保护数据C9Implement Security Logging and Monitoring安全日志与监控C10Handle All Errors and Exceptions安全处理所有错误与异常C1. Define Security Requirements从需求源头注入安全C1 是所有主动控制中最重要的一项强调安全必须在需求阶段被明确定义而不是事后补救。本仓库为 C1 提供了三份核心文档Abuse Case Cheat Sheet通过滥用用例Abuse Case反向推导安全需求。Attack Surface Analysis Cheat Sheet通过分析攻击面识别哪些功能需要安全需求。Threat Modeling Cheat Sheet通过威胁建模系统化地发现什么会出错。用滥用用例把模糊需求变成可执行的安全要求Abuse Case Cheat Sheet 指出需求中常见的应用必须安全应用必须防御所有攻击这类表述过于笼统对开发团队毫无用处。更务实的做法是识别出应用在其业务与技术上下文中最需要防御的攻击把每条攻击写成滥用用例——即一种实现者未预期到的功能使用方式允许攻击者基于其行为或输入来影响该功能或其使用结果。该文档给出了一个非常实用的落地流程并配有 流程总览图准备工作坊召集业务分析师、风险分析师、渗透测试人员、技术负责人和 QA 分析师用 Excel/Google Sheets 建立FEATURES业务功能、ABUSE CASES滥用用例、COUNTERMEASURES对策三张表。工作坊产出对每个业务功能由渗透测试人员提出攻击AppSec 给出对策并用 CVSS v3 计算器评定风险等级最终由业务/风险/技术负责人共识筛选出必须处理与可接受风险的用例。会后落地把选定用例写入功能规格说明瀑布或 User Story 验收标准敏捷。实现期跟踪为每个用例分配唯一 ID如ABUSE_CASE_001在代码中用AbuseCase(ids{ABUSE_CASE_001,ABUSE_CASE_002})之类的注解标记通过脚本即可定位用例的落地位置。验证用 SAST/DAST 自定义审计规则、安全定向的单元/集成/功能测试进行自动化验证或通过安全代码评审、渗透测试进行人工验证。用攻击面分析定位高风险的必须防御区Attack Surface Analysis Cheat Sheet 将攻击面定义为四部分的集合进出应用的数据/命令路径、保护这些路径的代码资源连接、认证授权、日志、校验与编码、应用中的高价值数据密钥、PII、核心业务数据、以及保护这些数据的代码。实践建议是把攻击点按类型分桶如登录入口、管理后台、查询搜索、CRUD 表单、业务工作流、事务接口/API、运维接口等统计各类型数量后抽样评估——不需要理解每个端点也能掌握系统的风险画像。对微服务与云原生应用应优先评估从互联网可达的组件可能位于代理、负载均衡与 Ingress 之后并自动伸缩。用威胁建模系统回答四个问题Threat Modeling Cheat Sheet 围绕威胁建模宣言的四个问题展开我们在做什么什么会出错我们打算怎么办我们做得够好吗系统建模阶段推荐使用数据流图DFD标注信任边界、数据流、数据存储、进程与外部实体威胁识别阶段常用 STRIDE 模型——Spoofing破坏认证、Tampering破坏完整性、Repudiation破坏审计、Information Disclosure破坏机密性、Denial of Service破坏可用性、Elevation of Privileges破坏授权之后对每个威胁在 Mitigate缓解/Eliminate消除/Transfer转移/Accept接受四种响应中做出选择并最终由全体利益相关方评审验证。C2. Leverage Security Frameworks and Libraries复用安全框架与库C2 强调不要重复造轮子应优先使用经过验证的安全框架、库与配置基线。本仓库映射的核心文档包括Clickjacking Defense Cheat SheetDotNet Security Cheat Sheet重点见 A3 Cross Site Scripting 小节PHP Configuration Cheat SheetRuby on Rails Cheat Sheet重点见 Tools 与 XSS 小节Vulnerable Dependency Management Cheat Sheet以点击劫持防御为例Clickjacking Defense Cheat Sheet 给出了三种相互独立、可纵深防御组合的机制HTTP 响应头阻止被嵌入框架优先使用 CSP 的frame-ancestors指令如Content-Security-Policy: frame-ancestors none;禁止任何域嵌入、frame-ancestors self;仅允许本站、frame-ancestors self *.somesite.com https://myfriend.site.com;允许白名单域也可用X-Frame-Options头DENY、SAMEORIGIN、ALLOW-FROM uri注意ALLOW-FROM已过时且浏览器不支持时会失效。SameSite Cookie 属性把会话 Cookie 标记为SameSiteStrict/Lax后嵌入iframe中的请求不会携带该 Cookie需要登录态的点击劫持攻击将直接失效但对无需认证的攻击无效只能作为纵深防御手段。Frame-buster 脚本对不支持上述头的旧浏览器用先隐藏 body、脚本检测到被嵌入时跳出框架的方式兜底。一个常见的错误是使用meta http-equivX-Frame-Options contentdeny这类 meta 标签——meta 标签不生效X-Frame-Options与 CSPframe-ancestors都必须作为 HTTP 响应头下发。另外要注意若资源同时携带frame-ancestorsenforce 处置按 CSP 规范X-Frame-Options应被忽略但旧版浏览器如 Chrome 40、Firefox 35会优先跟随X-Frame-Options。C3. Secure Database Access用参数化查询锁死数据库访问C3 是防御注入类漏洞的主战场映射文档包括SQL Injection Prevention Cheat SheetQuery Parameterization Cheat SheetDotNet Security Cheat SheetData Access 与 A1 SQL Injection 小节Ruby on Rails Cheat SheetSQL Injection 小节四种主防御方案SQL Injection Prevention Cheat Sheet 给出了四种按优先级排列的防御方案方案 1首选预编译语句参数化查询。先定义全部 SQL 骨架再用占位符把每个参数传入数据库始终能区分代码与数据。即便攻击者输入tom or 11也只会被当作普通字符串值匹配。方案 2安全构造的存储过程。与参数化查询等效前提是存储过程内部不使用动态拼接 SQL若在存储过程内动态构造 SQL同样必须用绑定变量见下文。方案 3白名单输入校验。仅当参数无法绑定如表名、列名、排序关键字 ASC/DESC时才使用理想情况下这些值应来自代码而非用户参数。方案 4强烈不推荐转义所有用户输入。容易出错只作为最后手段。可直接复制的参数化查询示例Query Parameterization Cheat Sheet 提供了覆盖主流语言的参数化查询示例下面节选几种典型写法。JavaJDBC 内置——用?占位符绑定参数String custname request.getParameter(customerName); String query SELECT account_balance FROM user_data WHERE user_name ? ; PreparedStatement pstmt connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results pstmt.executeQuery( );Java HibernateHQL 命名参数Query safeHQLQuery session.createQuery(from Inventory where productID:productid); safeHQLQuery.setParameter(productid, userSuppliedParameter);PHPPDO$stmt $dbh-prepare(INSERT INTO REGISTRY (name, value) VALUES (:name, :value)); $stmt-bindParam(:name, $name); $stmt-bindParam(:value, $value);RubyActiveRecordProject.where(name :name, :name name)C# ASP.NETSqlCommandstring sql SELECT * FROM Customers WHERE CustomerId CustomerId; SqlCommand command new SqlCommand(sql); command.Parameters.Add(new SqlParameter(CustomerId, System.Data.SqlDbType.Int)); command.Parameters[CustomerId].Value 1;RustSQLx——既支持编译期宏也支持运行时绑定let users sqlx::query_as!( User, SELECT * FROM users WHERE name ?, username ) .fetch_all(pool) .await .unwrap();该文档还特别提醒很多前端框架/库的查询参数化其实只是先把查询拼好再发给服务器参数化必须在服务端完成此外存储过程内部的动态 SQL 也必须用绑定变量。例如 Oracle PL/SQL 中用EXECUTE IMMEDIATE stmt INTO result USING UserID, Dept;SQL Server T-SQL 中用EXEC sp_executesql sql, UID VARCHAR(20), DPT VARCHAR(10), UIDUserID, DPTDept;来明确告诉数据库这些输入是数据而非代码。C4. Encode and Escape Data对所有输出做上下文感知编码C4 的核心思想是任何进入 HTML、属性、URL、JavaScript 或 CSS 上下文的动态变量都必须按所在上下文进行编码或转义防止被解释为代码。映射文档包括Cross Site Scripting Prevention Cheat SheetDOM based XSS Prevention Cheat SheetInjection Prevention Cheat SheetInjection Prevention Cheat Sheet in JavaLDAP Injection Prevention Cheat SheetWeb Frontend Security Cheat SheetClient Side JavaScript 小节输出编码的三个关键要点以 XSS 防御为例Cross Site Scripting Prevention Cheat Sheet 强调没有任何单一技术能解决 XSS必须组合防御。核心要点如下优先使用框架默认的自动转义现代框架通过模板、自动转义引导开发者走向安全实践。但要警惕框架的逃生舱React 的dangerouslySetInnerHTML、Angular 的bypassSecurityTrustAs*、Lit 的unsafeHTML、Polymer 的inner-h-t-m-l等一旦使用且未先清洗 HTML就会重新引入 XSS。按上下文选择正确的编码函数浏览器对 HTML、JS、URL、CSS 的解析方式不同用错编码方法反而会引入弱点。例如把变量插入div之间的HTML 上下文应做 HTML 实体编码→amp;、→lt;、→gt;、→quot;、→#x27;插入属性值HTML 属性上下文时必须用引号包裹变量并做属性编码以缩小需要编码的字符集。使用安全汇点Safe Sinks例如用 JavaScript 写 HTML 时使用.textContent它会自动做 HTML 实体编码是安全汇点。C5. Validate All Inputs以白名单为主、纵深防御为辅C5 要求对来自所有不可信来源的数据不止面向互联网的 Web 客户端还包括 extranet 后端数据源、供应商/合作伙伴/监管机构的上游数据尽早进行校验。映射文档众多核心包括Input Validation Cheat SheetBean Validation Cheat SheetDeserialization Cheat SheetFile Upload Cheat SheetMass Assignment Cheat SheetOS Command Injection Defense Cheat SheetXML External Entity Prevention Cheat SheetServer Side Request Forgery Prevention Cheat SheetUnvalidated Redirects and Forwards Cheat SheetREST Security Cheat SheetInput Validation 小节白名单优于黑名单Input Validation Cheat Sheet 明确指出用黑名单去拦截、11、script这类危险特征是本质有缺陷的做法——攻击者极易绕过过滤器而且会误伤合法输入如爱尔兰姓氏OBrian。正确姿势是白名单校验明确定义什么是允许的除此之外一律拒绝。注意输入校验不应作为防 XSS、SQL 注入的主要手段那要靠输出编码与参数化查询但正确实现能显著降低攻击影响。校验应在语法层结构化字段格式正确如 SSN、日期、货币符号与语义层业务上下文中的值正确如开始日期早于结束日期、价格在预期范围内同时进行。白名单正则示例——美国 ZIP 码^\d{5}(-\d{4})?$Java 中用Pattern预编译并调用matcher( zipCode ).matches()校验。对于自由格式的 Unicode 文本则应采用规范化Normalization、Unicode 字符类别白名单如十进制数字字母类别可覆盖拉丁、阿拉伯、西里尔、CJK 等全球文字与单字符白名单策略同时务必防范正则拒绝服务ReDoS——不良设计的正则可能让程序长时间占用 CPU。补充要点Bean ValidationJava 生态用声明式注解如NotNull、Size、Pattern在模型层集中执行校验规则仓库配套的 Bean_Validation_Cheat_Sheet_JSR.png 与 Bean_Validation_Cheat_Sheet_Typical.png 展示了典型校验流程。反序列化绝不反序列化不可信数据若必须采用白名单类过滤与完整性校验。文件上传校验文件类型、大小、内容将文件存储于应用目录之外并使用随机文件名。SSRF对 URL 输入做域名解析校验与目标 IP 白名单/黑名单过滤。C6. Implement Digital Identity正确实现认证、会话与身份C6 覆盖认证AuthN、会话管理与数字身份全链路映射文档包括Authentication Cheat SheetSession Management Cheat SheetPassword Storage Cheat SheetForgot Password Cheat SheetChoosing and Using Security Questions Cheat SheetJSON Web Token Cheat SheetSAML Security Cheat SheetJAAS Cheat SheetMultifactor Authentication Cheat SheetREST Security Cheat SheetJWT 小节认证基础原则Authentication Cheat Sheet 给出的关键实践包括用户 ID 应随机生成避免可预测/顺序化的 ID 被外部推断利用。禁止用敏感内部账号后端/中间件/数据库账号直接登录前端界面也不要用内部认证方案IDP/AD直接服务不可信的外部访问如公网/DMZ。密码强度策略若启用 MFA密码短于 8 字符即视为弱未启用 MFA 时短于 15 字符视为弱依据 NIST SP800-63B最大长度至少 64 字符以支持口令短语但注意某些哈希实现可能引发超长密码 DoS不要静默截断密码允许所有字符含 Unicode 与空格不做字符组合规则限制用强度计如 zxcvbn-ts帮助用户、对接 Pwned Passwords 拦截已泄露密码。密码比较优先使用框架提供的安全比较函数如 PHP 的password_verify()否则保证比较函数有最大输入长度、显式设定变量类型防类型混淆如 PHP Magic Hashes并以常数时间返回防时序攻击。修改密码功能必须要求用户处于已认证活动会话、并验证当前密码防止他人利用遗留在公共电脑上的活动会话篡改密码。身份与会话管理会话会话标识应每个用户唯一且难以预测详见 Session Management Cheat Sheet。密码存储使用自适应、加盐的慢哈希算法如 Argon2、bcrypt、scrypt、PBKDF2详见 Password Storage Cheat Sheet仓库附有 PBKDF2 迭代测试用例 可参考其迭代数设定思路。找回密码防止账户枚举与滥用详见 Forgot Password Cheat Sheet。多因素认证强烈建议启用 MFA详见 Multifactor Authentication Cheat Sheet。令牌使用 JWT/SAML 时严格校验签名、alg、过期时间、受众与颁发者详见 JSON Web Token Cheat Sheet 与 SAML Security Cheat Sheet。C7. Enforce Access Controls授权与访问控制的强制落地C7 关注授权AuthZ、越权与 CSRF 防御映射文档包括Access Control Cheat SheetInsecure Direct Object Reference Prevention Cheat SheetCross-Site Request Forgery Prevention Cheat SheetAuthorization Testing Automation Cheat SheetTransaction Authorization Cheat SheetCredential Stuffing Prevention Cheat SheetREST Security Cheat SheetAccess Control 小节DotNet Security Cheat SheetA4 不安全直接对象引用、A7 缺失功能级访问控制小节Ruby on Rails Cheat SheetIDOR/强制浏览与 CSRF 小节访问控制要点以默认拒绝为正模型正向positive访问模型中新角色/用户类型定义错误很容易暴露负向negative默认允许模型则必须格外谨慎地确保用户不会越权访问数据或功能。防止 IDOR不要直接用用户可控的主键访问他人记录使用间接引用或对象级授权校验详见 Insecure Direct Object Reference Prevention Cheat Sheet。防 CSRF使用同步 Token 模式、双重提交 Cookie、SameSiteCookie 属性等机制详见 Cross-Site Request Forgery Prevention Cheat Sheet。授权测试自动化通过自动化回归测试验证授权逻辑如对不同角色批量执行端点矩阵测试详见 Authorization Testing Automation Cheat Sheet。事务级授权对高风险交易支付、转账执行二次授权/动态确认详见 Transaction Authorization Cheat Sheet。凭据填充防护部署速率限制、验证码、IP 信誉与撞库检测详见 Credential Stuffing Prevention Cheat Sheet。C8. Protect Data Everywhere全生命周期保护数据C8 要求数据在静态、传输中与使用中都受到保护映射文档包括Cryptographic Storage Cheat SheetKey Management Cheat SheetTransport Layer Security Cheat SheetTransport Layer Protection Cheat SheetHTTP Strict Transport Security Cheat SheetPinning Cheat SheetUser Privacy Protection Cheat SheetREST Security Cheat SheetHTTPS 小节实践要点静态数据使用经过验证的加密算法如 AES-256-GCM并配合严格的密钥生命周期管理生成、轮换、吊销详见 Key Management Cheat Sheet传输数据强制 TLS配置 HSTS 响应头Strict-Transport-Security杜绝降级详见 HTTP Strict Transport Security Cheat Sheet高价值端点可配合证书/公钥固定Pinning防御中间人详见 Pinning Cheat Sheet仓库附带 DotNet 示例 与 OpenSSL 示例 压缩包用户隐私遵循数据最小化、明确同意与脱敏原则详见 User Privacy Protection Cheat Sheet。C9. Implement Security Logging and Monitoring安全日志与监控C9 强调可审计性攻击者依赖日志缺失 无监控响应来掩盖入侵Logging Cheat Sheet 引用的研究指出2016 年识别一次入侵平均耗时约 191 天。映射文档Logging Cheat SheetLogging Vocabulary Cheat SheetREST Security Cheat SheetAudit Logs 小节关键实践包括对认证成功/失败、授权决策、数据变更、输入校验失败等安全事件记审计日志日志内容必须不可篡改防伪/防删除记录来源 IP、用户标识、时间戳与事件结果日志不应包含敏感明文数据如密码、完整令牌并建立告警与响应机制使入侵行为可被及时发现。仓库的 Logging_Cheat_Sheet.drawio 提供了日志架构图可辅助理解日志链路设计。C10. Handle All Errors and Exceptions安全处理错误与异常C10 要求错误处理既不泄露内部信息又能为安全团队提供可用的诊断线索。映射文档Error Handling Cheat SheetREST Security Cheat SheetError Handling 小节核心原则面向用户的错误信息应通用且克制如请求无效绝不向客户端暴露堆栈跟踪、SQL 语句、文件路径、依赖版本等内部细节面向内部的完整错误细节含异常堆栈应写入仅授权人员可访问的日志并与 C9 的日志体系打通对所有可能失败的路径文件 IO、网络、数据库、第三方 API、解析与类型转换统一进行异常捕获与降级处理避免因未捕获异常导致信息泄露或可用性中断。仓库的 Error_Handling_Cheat_Sheet_Overview.png 提供了错误处理流程总览图可用于团队培训与评审对照。如何在本仓库中按控制查阅与维护本仓库的映射索引 IndexProactiveControls.md 是唯一的控制 → 文档总入口。建议的查阅路径按 C1–C10 定位当前要落实的主动控制点击控制下对应的 Cheat Sheet 文档全部位于 cheatsheets 目录获取完整的防御方案、代码示例与配置清单对于文档中引用的资产架构图、drawio 源文件、示例代码、PDF 参考资料按根目录相对路径在 assets 目录中查找例如 Error Handling 总览图、Clickjacking 嵌套框架示意图、滥用用例流程总览。需要说明的适用前提本文依据的索引面向 OWASP Top Ten Proactive Controls2018版本各映射文档的具体建议以其各自文档中的版本与适用条件为准部署与配置前请核对目标语言、框架与数据库的当前版本兼容性。仓库还提供了 GUIDELINE.md 与 CONTRIBUTING.md 说明 Cheat Sheet 的编写规范若团队要为本项目补充新的安全速查表可参照 New_CheatSheet 模板 起步。结语OWASP Top Ten Proactive Controls 2018 的价值在于把安全从口号变成十条可执行、可排序、可检查的开发动作而 IndexProactiveControls.md 则把这些动作与 CheatSheetSeries 仓库中数百页经过社区评审的实战文档一一对接。开发团队可以把 C1–C10 作为安全冲刺的验收清单把本文列出的各映射文档作为每一项的详细操作手册从而在 SDLC 的每一个阶段主动构筑防线而不是等到生产环境被攻击后才被动补救。赞分享应用安全【免费下载链接】CheatSheetSeriesThe OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics.项目地址https://gitcode.com/gh_mirrors/ch/CheatSheetSeries点击查看免费下载相关推荐OWASP主动控制指南构建安全应用的十大核心策略OWASP主动控制指南构建安全应用的十大核心策略 引言为什么需要主动安全控制 在当今数字化时代应用安全已成为软件开发的生命线。传统的被动防御策略往往在漏应用安全终极OAuth 2.0与SAML安全指南保护现代应用的权威手册终极OAuth 2.0与SAML安全指南保护现代应用的权威手册 OWASP Cheat Sheet Series 是一个由OWASP开放Web应用安全项目应用安全终极Docker和Kubernetes安全指南从零开始的容器安全防护清单终极Docker和Kubernetes安全指南从零开始的容器安全防护清单 OWASP Cheat Sheet Series是一个专注于提供特定应用安全主题高价应用安全上一篇终极指南在Mac上免费实现NTFS硬盘完美读写2024最新方案下一篇SQLyog社区版免费高效的MySQL数据库管理终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考