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

SQL Server 高階注入技術(八):單引號繞過、輸入驗證三策略與長度限制陷阱

     編輯:關於SqlServer

攻擊者可將單引號分散在已知惡意字串中(如 uni'on sel'ect @@version-'-)繞過簡單過濾器。防禦端常見三種驗證策略:

1. 整理資料(轉義)

function escape(input) {
    input = replace(input, "'", "''");
    return input;
}

問題:改變資料長度,可能導致截斷繞過;無法防禦數值型注入。

2. 拒絕已知惡意輸入(黑名單)

function validate_string(input) {
    var known_bad = ["select","insert","update","delete","drop","--","'"];
    for (var i=0; i= 0) return false;
    return true;
}

問題:新攻擊手法層出不窮,黑名單永遠滯後;大小寫、編碼、註解均可繞過。

3. 僅允許合法輸入(白名單)

function validatePassword(input) {
    var good_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for (var i=0; i

最安全但實施難度高(如人名含連字號、撇號)。

長度限制陷阱

  • 極短載荷同樣毀滅性:';SHUTDOWN-- 僅 12 字元即關閉 SQL Server。
  • 截斷後重組:用戶名限 16 字元,輸入 aaaaaaaaaaaaaaa' 經過濾變 aaaaaaaaaaaaaa'' 再截斷為 aaaaaaaaaaaaaa',密碼欄位以單引號開頭即可注入 '; SHUTDOWN--。

躲避稽核

在註解後附加 sp_password(--sp_password),SQL Server 追蹤會隱藏該批次完整文本,僅記錄 -- 'sp_password' was found...,干擾事後鑑識。

建議: 結合白名單與黑名單(先白名單再檢測已知危險模式),所有輸入(含資料庫回讀資料)統一驗證,防範二次注入。

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