2015-08-19 34 views
-1
$ID     = $db->real_escape_string(strip_tags(stripslashes($_GET['ID']))); 
      $GetThreadFromID = mysqli_fetch_object(mysqli_query($db, "SELECT * FROM ForumThreads WHERE ID=$ID")); 
      $GetThreadStarter = mysqli_fetch_object(mysqli_query($db, "SELECT * FROM Users WHERE ID='$GetThreadFromID->PosterID'")); 
      $GetTopicFromThread = mysqli_fetch_object(mysqli_query($db, "SELECT * FROM ForumTopics WHERE ID='$GetThreadFromID->ForumID'")); 
      $ThreadExist  = mysqli_num_rows(mysqli_query($db, "SELECT * FROM ForumThreads WHERE ID='$ID'")); 
      $GetAllWatching  = mysqli_query($db, "SELECT * FROM ForumWatchedThreads WHERE ThreadID='$ID' AND UserID='$client->ID'"); 

      if ($ThreadExist == "0") { 
           echo " 
           <div class='container'> 
            <div class='panel panel-danger'> 
             <div class='panel-heading'>Error</div> 
             <div class='panel-body'> 
              The thread you requested does not exist. 
             </div> 
            </div> 
           </div> 
           "; 
      include $_SERVER["DOCUMENT_ROOT"]."/_INCLUDES/Footer.php"; 
      exit(); 
      } 

我有一個手動編碼論壇的網站。你可以訪問論壇線程罰款。假設線程ID爲12,但我在其末尾加上了一個撇號?ID =,那麼論壇標題和論壇主體將與其他信息一起爲空。我怎樣才能使它所以它會顯示與ID線程,因此,如果我把這個在地址欄:???ID = 13 //或ID = 13「」,它仍然會顯示ID = 13,不受任何干擾,甚至顯示錯誤說論壇帖子不存在?當在ID中輸入撇號時沒有數據顯示 - PHP

+0

閱讀本文http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 – rjdown

回答

1

你簡單地假定查詢成功。既然你不爲失敗檢查,如果查詢失敗的== "0"會取得成功,因爲()由查詢返回的布爾值FALSE並獲取()將測試爲等於「0」。

不要假設有一個DB操作成功。即使你的SQL語法是完美的,查詢無論如何都會失敗的原因幾乎是無限的。

$result = mysqli_query(...) or die(mysqli_error($db)); 
          ^^^^^^^^^^^^^^^^^^^^^^^^^^ 

if (mysqli_num_rows($result) === 0) { 
    die("No results"); 
} 

or die()將處理查詢徹底失敗,而===全等測試將確保你的實際整數0測試,而不是任何其他值也測試等於0,如'' == 0在php中爲TRUE。

而且注意你的第一個查詢仍然容易受到某種形式的sql injection attacks,儘管所有的剝離和引用你在幹什麼。例如1 or 1=1會滑倒,因爲沒有標籤,沒有斜線,也沒有'個字符可以逃脫。

+0

非常感謝你的解釋。我該如何解決可能容易受到SQL注入攻擊的查詢,並且如果他們想要,他們實際上很容易讓某人進入我的數據庫?我只是在第一個查詢中做了'$ ID'而不是普通ID,這固定了空白顯示。這是否也解決了SQL注入問題? –

+0

你正在使用mysqli。使用準備好的語句和佔位符:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php –

+0

這意味着我將不得不重寫我的網站上的每一個查詢,這將非常煩人。我該怎麼辦? –

相關問題