2011-06-11 189 views
0

我遇到了MySQL插入查詢的麻煩。這是我想要做的:將URL插入到MySQL數據庫中

在我的表中的一個字段中,我想插入一堆URL和它們各自的標題。我建立這樣的查詢就像這樣:

?content=<title of webpage>%%<url of webpage>%%<title of webpage>%%<url of webpage>%% 

等等,取決於有多少網址。

問題是如果URL包含「?var = somevalue」之類的東西,那麼我的查詢就會中斷,因爲MySQL會認爲我聲明瞭一個新變量。

我該如何做到這一點?

+1

您使用什麼代碼插入數據? – 2011-06-11 17:00:58

+2

PHP的數據庫工具集是否包含佔位符?看起來像一個問題實際上是一個大問題。在您當前的配置中,如果某個「URL」包含惡意SQL語法,則會暴露給SQL注入攻擊。 – DavidO 2011-06-11 17:13:31

+0

我正在用Javascript構建我的查詢,然後使用AJAX將它傳遞給PHP函數以插入MySQL數據庫 – jnfr 2011-06-11 18:19:55

回答

0

我認爲你應該如果你使用的是PHP的一個選項是使用下面的命令逃脫了\

序列(有多種形式):

  • 程序風格

    string mysqli_real_escape_string (mysqli $link , string $escapestr) 
    
  • 面向對象的風格

    string mysqli::escape_string (string $escapestr) 
    
    string mysqli::real_escape_string (string $escapestr) 
    
0

這裏是如何在PHP中使用佔位符(我懷疑是你使用的語言)

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)"); 
$stmt->bindParam(1, $name); 
$stmt->bindParam(2, $value); 

$name = 'one'; 
$value = 1; 
$stmt->execute(); 

我抓起,從php.net

佔位符,使用預處理語句起到幾個作用,但其中一個是安全代碼的單獨數據,以便您描述的問題消失

從網站引用上面提到的:

參數來準備的語句 不需要被引用;驅動程序 會自動處理此問題。如果 應用程序獨佔地使用預處理 語句,開發人員可以肯定 沒有SQL注入會發生 (但是,如果 查詢的其他部分正在興建了 轉義輸入,SQL注入是 仍有可能)。