参考资料
如何防止SQL注入和XSS攻击?
防止SQL注入和XSS攻击的方法
SQL注入防护
- 使用参数化查询(预编译语句)
-
示例(PHP/PDO):
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');$stmt->execute(['username' => $userInput]);
- 使用ORM框架
-
示例(Laravel Eloquent):
$user = User::where('username', $userInput)->first();
- 输入验证和过滤
-
示例(过滤非数字输入):
$id = filter_var($_GET['id'], FILTER_VALIDATE_INT);
- 最小权限原则
- 数据库用户只授予必要权限
XSS防护
- 输出编码
-
示例(HTML编码):
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
- 使用CSP(内容安全策略)
-
HTTP头示例:
Content-Security-Policy: default-src 'self'
- 设置HttpOnly和Secure标志
-
示例(PHP设置cookie):
setcookie('sessionid', $value, ['httponly' => true, 'secure' => true]);
- 使用框架的模板引擎
-
示例(Twig自动转义):
{{ user_input }}
- 输入验证
-
示例(验证URL):
if (filter_var($url, FILTER_VALIDATE_URL)) { // 有效URL}
通用防护措施
-
保持系统和框架更新
-
使用Web应用防火墙(WAF)
-
定期进行安全审计
-
实施CSRF防护措施