2014-01-16 43 views
-1

這是我第一篇文章在stackoverflow。 我要問幾個簡單:與PHP消毒輸入,真的感謝的人誰可以幫助我:)PHP - 我應該在magic qotes關閉時清理字符串嗎?

1)好吧,但是當我運行get_magic_quotes_gpc()返回false d問題。這意味着關閉了魔術引號。它是否正確?

2)我應該使用stripslashes(),htmlentities()& strip_tags()何時禁用魔術引號來清理任何用戶輸入的字符串嗎?

3)即使在輸入字符(如\或其他字符)時關閉了魔術引號,但我的程序無法避開它們。這是爲什麼?

4)然後我修改我的程序來調用函數來清理字符串,然後處理它。即使字符串被清理,它仍然顯示那些不需要的字符。這有什麼錯在sanitizeString()函數

下面是我的代碼,對問題3) 相關(該程序應該華氏轉換成攝氏或反之亦然)

<!DOCTYPE html> 
<html> 
    <head> 

    </head> 

    <body> 

     <form action="TemperatureConverter.php" method="post"> 
      <label>Fahrenheit</label><input type="text" name="f" size="10"/><br> 
      <label>Celsius</label><input type="text" name="c" size="10"/><br> 
      <input type="submit" name="submit" value="SUBMIT"> 

     </form> 


    </body> 


</html> 




<?php 
$f=''; 
$c=''; 

if(isset($_POST["f"])){ 
    $f= sanitizeString($_POST["f"]); 
} 
if(isset($_POST["c"])){ 
    $c=sanitizeString($_POST["c"]); 
} 

if($f!=""){ 
    $c=(5/9)*($f-32); 
    echo $f.' Fahrenhite is equal to '.$c.' Celsius '; 
} 
else if($c!=""){ 
    $f=$c*(9/5)+32; 
    echo $c.' Celsius is equal to '.$f.' Fahrenhite '; 
} 

function sanitizeString($str){ 
    $str= stripslashes($str); 
    $str= htmlentities($str); 
    $str= strip_tags($str); 
    return $str; 
} 

我想我已經發布我的代碼正確遵守規則的計算器。如果沒有抱歉。 :(

+2

根據您在進入該環境時帶入的特定_context_處理數據。對任何數據只要使用stripslashes,htmlentities和strip_tags「無論如何」都只是無稽之談。這是一個已經討論了很多的話題,所以請做一些研究。 – CBroe

+0

你應該看看PHP的'filter'函數[here](http://www.php.net/manual/en/book.filter.php)。他們可以很費勁地使用,但提供了廣泛的選項來消毒和驗證輸入。 – 2014-01-16 11:14:12

回答

0

在你的榜樣,你知道輸入一個數字,這將是最好簡單地檢查是否存在,而不是試圖增加額外的過濾。

例如,

if(isset($_POST["f"])){ 
    $inFahrenhite = trim($_POST['f']); // remove any leading/trailing spaces 
    if (is_numeric($inFahrenhite)) $f = $_POST['f']; 
} 

上面的代碼驗證輸入是數字的。既然你期待一些別的無效的,可以忽略。

其他問題。

  1. 是的,這意味着設置被關閉。
  2. 所有過濾器不是必需的。如果輸入應該是一個數字,則不需要允許html值。使用http://www.php.net/manual/en/book.filter.php將是一個開始。
  3. 魔術引號只能轉義某些字符。設置將被棄用,所以你應該避免使用它。
  4. 這些函數僅用於確保字符正確轉義。例如,&將轉換爲&amp;。那裏仍然有一個&,但它現在有不同的目的。
0

在那裏有無窮的編寫過時的PHP教程,基本上表明,清理是一個神奇的過程,它會自動修復您的數據,以避免任何潛在的漏洞。許多開發人員都認爲這是一個事實,並且應用推薦的功能,甚至無需在文檔中查找以找出他們的真正功能。因此,他們不僅編寫易受攻擊的應用程序,而且還會在此過程中破壞合法的用戶數據。

我的建議是:

  1. 閱讀使用首次任何函數的文檔
  2. 瞭解你需要什麼問題解決
  3. 想想功能是否做一些事情來解決這個問題

For instance

用strip_tags - 地帶HTML和PHP標籤從字符串

實施例#1用strip_tags()的例子

<?php 
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; 
echo strip_tags($text); 
echo "\n"; 

// Allow <p> and <a> 
echo strip_tags($text, '<p><a>'); 
?> 

你有一個溫度轉換工具。從華氏度移除HTML標籤有意義嗎?

但是想象一下你有一個網站發佈HTML代碼片段。現在你有了HTML,使用它的HTML功能是有意義的,不是嗎?但是,爲什麼要從HTML片段中刪除HTML?你會讓你的網站無用!您需要解決的問題是將這些片段注入該網站,並將其顯示爲原始HTML,而不是渲染。要做到這一點,你需要將每個<符號轉換爲&lt;

相關問題