发送表单时,用户文本字段中的撇号实际上正在被转义。我得到了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