發送表單時,用戶文本字段中的撇號實際上正在被轉義。我得到了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> </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
,但它不會顯示它。這可能是因爲控制檯將顯示您在當前頁面發送給它的數據?
我的意思是,我的形式的數據發送從page1
到page2
(insert.php
,該插入數據在數據庫中),然後從返回(一切對用戶透明),以page 1
(其顯示在數據庫中的新數據) page2
,我只是進入控制檯我發送給它的page1
而不是page2
。
對不起,我的英語,並非常感謝!
您應該閱讀Cross-Site Scripting(XXS) - https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet。一些字符在輸入上被轉義以防止黑客關閉HTML屬性/輸入,然後執行javascript。 – Tricky12
嗨Tricky,謝謝你的回答。我知道這一點,我的意思是如何避免這種默認行爲?,我想保留撇號,所以我不想逃脫。我改變了標題,因爲它沒有反映我想問什麼。 – oknay