2016-02-29 65 views
0

發送表單時,用戶文本字段中的撇號實際上正在被轉義。我得到了PHP頁面中文本字段的值,它顯示撇號被轉義:如何避免HTML5輸入文本中出現撇號?

例如原始用戶文本輸入:用戶17的祕密數據;在PHP接收頁面通過$_POST收到的數據:用戶17\的祕密數據。

我想,在驗證表單時,撇號被'\'替換爲轉義字符。我怎樣才能避免這種行爲? (我知道,正如一個人在這裏指出的那樣)是出於安全原因,但我會在稍後處理。

我的形式是這樣的一個:

<form id="form_data" action="insert.php" method="post"> 
    <table border="1" cellpadding="5" cellspacing="0"> 
     <tr style="text-align: left;"> 
      <th style="width: 150px;">Name</th> 
      <th style="width: 150px;">Password</th> 
      <th style="width: 200px;">Secrets</th> 
      <th>&nbsp;</th> 
     </tr>  
     <tr> 
      <td style="width: 150px;"><input type="text" name="username"></td> 
      <td style="width: 150px;"><input type="text" name="password"></td> 
      <td style="width: 200px;"><input type="text" name="secrets"></td> 
      <td><input id="boton" type="submit" value="Submit"></td> 
     </tr> 
    </table> 
</form> 

我得到的參數insert.php執行以下操作:

if (isset($_POST['secrets'])) { 
    $secrets = $_POST['secrets']; 
    $firephp->info($secrets,'secrets: '); 
} 

順便說一句,你可以看到,我就先顯示的數據在控制檯上使用firephp,但它不會顯示它。這可能是因爲控制檯將顯示您在當前頁面發送給它的數據?

我的意思是,我的形式的數據發送從page1page2insert.php,該插入數據在數據庫中),然後從返回(一切對用戶透明),以page 1(其顯示在數據庫中的新數據) page2,我只是進入控制檯我發送給它的page1而不是page2

對不起,我的英語,並非常感謝!

+0

您應該閱讀Cross-Site Scripting(XXS) - https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet。一些字符在輸入上被轉義以防止黑客關閉HTML屬性/輸入,然後執行javascript。 – Tricky12

+0

嗨Tricky,謝謝你的回答。我知道這一點,我的意思是如何避免這種默認行爲?,我想保留撇號,所以我不想逃脫。我改變了標題,因爲它沒有反映我想問什麼。 – oknay

回答

0

我已經設法自己解決問題。如果有人對此感興趣或者遇到同樣的問題,我會分享解決方案。

這似乎是導致撇號自動逃脫的'問題',這是由於我的PHP版本(5.2.6);在這個版本中,在php.ini文件(magic_quotes_gpc)中有一個參數,當它打開時會導致撇號,引號和反斜槓被轉義(例如在我的情況下)從POST或GET全局變量中獲得的參數;只需設置此選項即可停止「問題」。

問候。