2013-10-09 18 views
1

我使用的PHP程序RIPS(http://rips-scanner.sourceforge.net/)掃描我的PHP腳本漏洞,它要回來的消息和addslashes()的不安全使用Userinput到達敏感片由於不帶引號

Userinput reaches sensitive sink due to insecure usage of addslashes() without quotes Userinput reaches sensitive sink due to insecure usage of addslashes() without quotes 

什麼這是否意味着addslashes的不安全使用?我如何保護下面的代碼?

47: mysql_query $sql = mysql_query("INSERT INTO questions_answers(PID, Name, Email, Question, Date) VALUES ('$product_ID', '$name', '$email', '$question', '$date') ") or mydie ("Error" . mysql_error() . " File: " . __FILE__ . " on line: " . __LINE__); 
4: $product_ID = addslashes($_GET['product_id']); 
38: $name = addslashes(strip_tags($name)); 
34: $name = ucwords($name); 
21: $name = ''; 
5: $name = addslashes($_POST['name']); 
40: $email = addslashes(strip_tags($email)); 
14: $email = ''; 
6: $email = addslashes($_POST['email']); 
39: $question = addslashes(strip_tags($question)); 
35: $question = ucfirst($question); 
7: $question = addslashes($_POST['question']); 
36: $date = time(); 

注意:這是來自RIPS的輸出,請注意應該從下往上讀取它的行數。

回答

1

addslashes對注射的保護很差。另外,你應該使用mysql_real_escape_string。其實,你也不應該使用它。您應該使用PDO或mysqli正確使用參數化查詢。

+0

這是否意味着重寫整個數據庫連接,插入等。以及我的腳本與數據庫交互的方式? – user1398287

+0

@ user1398287如果您想更改爲PDO或mysqli,您可能需要做出相對重大的更改。使用'mysql_real_escape_string'只需要你改變調用的函數的名稱(即'''addslashes') –

+0

我不會稱爲addslashes「窮人」來支持mysql_real_escape_string,因爲大多數時候它們的行爲完全相同 –

-2

嘗試使用mysql_real_escape_string改爲addslashes

希望這會有所幫助。

歡呼

+0

看起來像在PHP 5.5.0之後mysql_real_escape_string不會在? http://php.net/manual/en/function.mysql-real-escape-string.php – user1398287

+0

@ user1398287看起來像mysql_real_escape_string還在。 –

0

這是堆棧溢出,這是仍在等待它的勤奮的研究員非常有趣的功能:

沒有人從未讀過的問題身上。

由於問題「西方最快的槍」,一個共同的習慣一直參與中發展,形成這樣一個算法:

  1. 閱讀問題的標題。
  2. 找到關鍵字在裏面。
  3. 搜索您的本地知識庫爲最廣泛的關於此關鍵字的低俗或迷信。
  4. 把它們當作答案。
  5. 收集聲望點。

具有諷刺意味的是,它的工作原理。大部分時間。
那些詢問,很少打擾最小研究的人,他們的問題都是一樣的。
因此,這種基於關鍵詞的方法很常用。

但是,有時候這裏會出現一個問題,它只需要閱讀不是標題,而是問題主體。
有時懷疑甚至身體含有答案,任何人誰懶得看的錯誤信息:和addslashes的

不安全的使用()不帶引號

就這麼簡單。 Nuw讓我們看看實際問題:

我該如何確保下面的代碼安全?

使用佔位符。

  • 最常見的解決方案是PDO
  • 最方便和安全的一個 - safeMysql,這實際上使您可以使用佔位符要添加到查詢動態的一切。