2016-02-29 62 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全局变量中获得的参数;只需设置此选项即可停止“问题”。

问候。