2012-04-11 54 views
2

我有很多具有的東西像安全性添加到不安全的PHP MySQL的腳本半自動地

1- mysql_query("update ... $_POST['foo'] ..."); 

文件我想改變的是對這個

2- $foo = mysql_real_escape_string($_POST['foo']); 
3- mysql_query("update ... $foo ..."); 

我有想法,打開每個文件,選擇文本$_POST['foo'](表格1-)按下一個組合鍵,然後自動執行一些工具:

  • 放在我的剪貼板上d mysql_real_escape_string($_POST['foo']);(在2-相加)
  • 與文本替換在文本中的1- 3-

然後手動編寫$foo =並按下Ctrl + v至產生2-

我嘗試使用notepad ++和一個名爲fingertext的插件,並嘗試製作一個宏,但沒有成功。

有什麼建議嗎?

+1

這個問題的聲音只適用於某種文本編輯器或宏。 – 2012-04-11 21:05:01

+0

我願意使用任何解決方案,但更喜歡使用一些文本編輯器或宏,如你所說(不僅記事本++,不僅窗口,而且還有Linux) – jperelli 2012-04-11 21:08:55

回答

3
$_POST = sanitize($_POST); 
$_GET = sanitize($_GET); 

    function sanitize($input) { 
     if (is_array($input)) { 
      foreach($input as $var=>$val) { 
       $output[$var] = sanitize($val); 
      } 
     } else { 
      if (get_magic_quotes_gpc()) { 
       $input = stripslashes($input); 
      } 
      $output = mysql_real_escape_string($input); 
     } 
     return $output; 
    } 

它並不完美,但如果你有很多不安全的網頁,需要速戰速決,使他們所有的安全,你可以連接到MySQL後,把這個。另外,請記住,如果您的查詢具有未加引號的數字變量,則必須驗證它們是數字,還是在將查詢用於查詢之前先進行類型轉換。 mysql_real_escape_string()僅適用於引用值(即blah_column ='value',但不是blah_column = value)。

+0

很好。如果裏面的變量不是字符串而是int,那麼只有一個問題。我想它可以使用一些強制轉換+異常機制。我會嘗試編輯 – jperelli 2012-04-11 21:16:42

2

用手替換它們。如果你關心安全性,不要使自動更換。並且至少要製作一個功能而不是mysql_real_escape_string((),請使用它。

//just for example, better can be written 
function db_escape($var, $type = 'string') 
{ 
    if($type == 'string') return mysql_real_escape_string($var); 
    if($type == 'integer') return (int) $var; 
    if($type == 'float') return (float) $var; 
} 
+0

爲什麼我需要該功能?你打算爲了更好的可維護性嗎? – jperelli 2012-04-11 21:12:14

+0

@jperelli就是其中的例子。你可以寫出更好的一個。 – safarov 2012-04-11 21:15:07