首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 安全編程指南:FIEO 原則、XSS、CSRF、會話劫持、SQL 注入、密碼存儲、暴力破解、SSL

     編輯:PHP 相關知識

核心原則:FIEO (Filter Input, Escape Output)

過濾所有輸入,轉義所有輸出。貫穿始終的安全真言。

1. 輸入驗證工具

  • ctype 函數族:ctype_alnum, ctype_digit, ctype_alpha... 快速檢查字符類型
  • PCRE 正則:preg_match('/^[a-z0-9_]+$/i', $input) 靈活驗證格式

2. XSS (跨站腳本攻擊)

成因:用戶輸入未轉義直接輸出到 HTML/JS 上下文

<!-- 危險示例 -->
<form action="<?php echo $_SERVER['PHP_SELF'];?>">...</form>

防禦:

  • 輸出時 htmlspecialchars($str, ENT_QUOTES, 'UTF-8')
  • CSP 標頭:Content-Security-Policy: default-src 'self'; script-src 'self'
  • HttpOnly Cookie 防竊取

資源:XSS Cheat Sheet | Shiflett XSS

3. CSRF (跨站請求偽造)

本質:利用受害者已登錄會話,誘導發起惡意請求

防禦:

  • 關鍵操作驗證 Token (同步器模式)
  • SameSite Cookie 屬性:Set-Cookie: ...; SameSite=Strict
  • 驗證 Referer/Origin 標頭

資源:Shiflett CSRF

4. 會話固定

攻擊者預設 Session ID,誘導受害者使用,登錄後劫持會話。

防禦:session_regenerate_id(true) 登錄後重新生成 ID。

5. 會話劫持

竊取/預測有效 Session ID。

防禦:HTTPS 全站、Session ID 足夠長隨機、IP/UA 綁定、定期輪換。

6. SQL 注入

本質:輸入被拼接為 SQL 片段執行

防禦:

  • 預處理語句 (PDO/MySQLi):參數化查詢,數據與代碼分離
  • 嚴禁字符串拼接 SQL
  • 最小權限數據庫賬號

7. 密碼存儲

  • 絕不明文/可逆加密
  • bcrypt / Argon2:password_hash($pwd, PASSWORD_BCRYPT) / PASSWORD_ARGON2ID
  • 驗證:password_verify($input, $hash)
  • 庫推薦:password_compat (PHP < 5.5)

8. 暴力破解

  • 限制嘗試次數 (IP/賬號)
  • 指數退避延遲
  • 驗證碼 / 兩步驗證 (2FA/TOTP)
  • 賬號鎖定通知

9. SSL/TLS

  • 全站 HTTPS (HSTS)
  • 現代協議:TLS 1.2/1.3,禁用 SSLv3/TLS 1.0/1.1
  • 強加密套件、OCSP Stapling、Certificate Transparency
  • 資源:OWASP SSL Best Practices

權威安全資源

安全是系統工程,無絕對安全,只有持續投入、分層防禦、快速響應。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved