程序员如何做「安全编码」:不是可选项,是必选项

程序员如何做「安全编码」:不是可选项,是必选项

安全漏洞是系统被攻击的根本原因。

很多安全漏洞不是攻击者多厉害,是开发者写了不安全的代码。


一、常见的安全漏洞

1. SQL 注入

用户输入直接拼接到 SQL 语句中。

// 不安全
String sql = "SELECT * FROM users WHERE name = '" + name + "'";

// 安全:使用参数化查询
PreparedStatement ps = connection.prepareStatement(
    "SELECT * FROM users WHERE name = ?"
);
ps.setString(1, name);

2. XSS(跨站脚本攻击)

用户输入直接渲染到页面上。

<!-- 不安全:用户输入当作 HTML 解析 -->
<div>{{userInput}}</div>

<!-- 安全:转义 HTML 特殊字符 -->
<div>{{userInput | escape}}</div>

3. CSRF(跨站请求伪造)

诱导用户访问恶意页面,自动发起攻击者指定的请求。

解决方案:CSRF Token、SameSite Cookie。

4. 敏感信息泄露

密码、密钥、用户信息没有加密或脱敏。

5. 权限绕过

没有校验用户权限,或者校验不完整。


二、安全编码原则

1. 输入校验

2. 参数化查询

所有数据库操作使用参数化查询。

3. 最小权限原则

数据库、文件系统的权限要最小化。

4. 敏感数据保护

5. 安全日志

记录安全相关的操作,便于审计。


三、安全工具

1. 扫描工具

2. 依赖检查


四、安全开发流程

1. 安全设计

架构设计阶段考虑安全。

2. 安全 Code Review

代码审查加入安全检查项。

3. 安全测试

4. 安全监控


五、一句话总结

安全编码 = 输入校验 + 参数化查询 + 最小权限 + 敏感数据保护 + 安全日志,核心是把安全当作开发的一部分

/*]]>*/