ADOdb 中的 SQL 注入和一般網站安全


我讀了很多書,但仍然不能 100% 理解某些 SQL 注入是如何發生的!

我想從知道的人那裡看到基於我的示例的 SQL 注入的具體示例,以便可以復制、測試和修復它。我已經嘗試 SQL 注入我的代碼但不能,所以我希望有人能證明我不是這樣!

1.SQL 注入只能通過 POST 或 GET 方法發生,我說得對嗎,這意味著在網站上它應該是 post 表單,例如“註冊或搜索”或類似“search.php?tags=love”的查詢?

說這樣可以注入下面有POST方法的代碼嗎?

$name = trim($_POST['username']);
$mail = trim($_POST['email']);
$password = trim($_POST['密碼']);

   if ($errors == "false") {
    $sql =
        “插入
           客戶
         放
           name='" .mysql_real_escape_string($name) ."',
           mail='" . mysql_real_escape_string($mail) . "',
           密碼='" . mysql_real_escape_string(sha1($password)) . "'";
           $連接->執行($sql);
        
    }

2.另一個有GET方法:rate.php?like&videoID=250&userID=30

$sql =
    “選擇
        視頻ID
     從
        喜歡
     在哪裡
        videoID = '" .mysql_real_escape_string($videoID). "' AND UID = '" .mysql_real_escape_string($userID). "' LIMIT 1";
        $連接->執行($sql);

請幫助那些對這個主題感到自由但使用具體例子的人。

提前致謝,

伊利亞

SQL 注入攻擊發生在用戶輸入 編碼不正確時。通常,用戶輸入是用戶通過查詢發送的一些數據,即 $_GET$_POST$_COOKIE$_REQUEST$_SERVER 數組。但是,用戶輸入也可以來自各種其他來源,例如套接字、遠程網站、文件等。因此,您應該真正處理除常量之外的所有內容(例如 'foobar') 作為用戶輸入

在您發布的代碼中,mysql_real_escape_string 用於編碼(=escape)用戶輸入。因此該代碼是正確的,即不允許任何 SQL 注入攻擊。

請注意,很容易忘記對 mysql_real_escape_string 的調用 – 對於熟練的攻擊者來說,一次就足夠了!因此,您可能希望將現代 PDO準備好的語句而不是adodb。

我最近一直在深入研究這個主題,並想與其他人分享非常有趣的材料,從而使我的問題對每個人都更加完整和有啟發性。

來自 YouTube

來自維基百科

來自 OWASP

來自 PHP 手冊

來自微軟和甲骨文

堆棧溢出

SQL 注入掃描器