PHP表单上的Stripslashes

时间:2015-05-18 14:17:48

标签: php html forms stripslashes

我有一个HTML表单,提交之后应该将表单字段显示在echo语句(也包含HTML元素)中的PHP文件中

我遇到的问题是,虽然结果按预期生成,但在表单条目具有"或者'在那里,他们在results.php页面

中没有被转义

我的档案:

form.html

<form action="./results.php" method="post" id="sgemail">  
  <table align="center" border="1" width="60%" style="border-color: #D2DFF5;">
    <tr>
      <td width="50%" style="padding-left: 8px; text-align: left;">
        <div class="form-group">
          <strong>Article 1 Title<br /></strong>
            <input type="text" class="form-control" id="ifn1title" placeholder="" name="ifn1title"><br />
          <strong>Article 1 URL<br /></strong>
            <input type="text" class="form-control" id="ifn1url" placeholder="" name="ifn1url">
        </div>
      </td>
      <td width="50%" style="padding-left: 8px; text-align: left;">
        <div class="form-group">
          <strong>Article 1 Description<br /></strong>
            <textarea rows="5" class="form-control" cols="10" name="ifn1desc" form="sgemail"></textarea>
        </div>
      </td>
    </tr>
  </table>
  <table align="center" width="60%">
    <tr>
      <td align="center" width="33%" style="padding-left: 8px; text-align: left;">
        <input class="btn btn-primary" type="submit" value="Generate Results HTML Code">
      </td>
    </tr>
  </table>
</form>

results.php

<?php
  if (isset($_POST['ifn1title']))
  if (isset($_POST['ifn1url']))
  if (isset($_POST['ifn1desc']))
    {
      $form_ifn1t = $_POST['ifn1title'];
      $form_ifn1u = $_POST['ifn1url'];
      $form_ifn1d = $_POST['ifn1desc'];

echo "
<table style=\"background-color:#D6E3F0;\" bgcolor=\"#D6E3F0\" align=\"center\" width=\"100%\">
  <tr align=\"center\">
    <td align=\"center\"><br />

<textarea id=\"selectori\" rows=\"50\" cols=\"120\" onclick=\"this.focus();this.select()\" readonly=\"readonly\">

    <ul>
      <li><a href=\"$form_ifn1u\"><strong>$form_ifn1t</strong></a><br />$form_ifn1d</li>
    </ul>

</textarea>
    </td>
  </tr>
</table>";
}
?>

当我提交表格时,

相应位置的结果显示为

<ul>
  <li><a href="http://www.example.com"><strong>\"Article\"</strong></a><br />\"Test Description\"</li>
</ul>

如何修复它以便结果如下所示?

<ul>
  <li><a href="http://www.example.com"><strong>Article</strong></a><br />Test Description</li>
</ul>

由于

编辑:

我在我的php文件上添加了以下内容,这解决了我的问题

{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}

这可以防止代码注入吗? 感谢

2 个答案:

答案 0 :(得分:0)

  

我在PHP 5.3.29如何关闭此单个文件上的魔术引号

你不想这样做。 你希望它们一劳永逸地消失。

请参阅here了解它们是什么,为什么存在,为什么它们会变坏以及如何禁用它们。

长话短说,您应该真正升级您的PHP版本。

如果你不能这样做,你应该更换主机或扔掉任何阻止你这样做的东西。

第三个最佳选择是禁用魔术引号:

<input class="js-file-input" name="request[0][files[]]" type="file" />

对于php_flag magic_quotes_gpc Off stripslashes$_GET和{{1}中的每个条目,如果您真的无法执行上述任何操作,最糟糕的选择是$_POST如果你使用它们 因为你不能在运行时禁用魔术引号 从here复制1:1:

$_COOKIE

在你的情况下,那只是

$_REQUEST

升级您的PHP版本!

答案 1 :(得分:-2)

回应html和php的最佳方式是:

<?php echo "<div class='my-class'>some HTML here, but i want my ".$php_variable." also in this text</div>";?>

使用“在PHP代码中使用”时,总是很麻烦。“所以我总是使用单曲'所以我不必排除”。

PS:直接回显$ _POST变量并不是最安全的方法。为了确保您在某种程度上免受代码注入的影响,请确保使用类似下面的基本内容:

$sendVar = stripslashes(htmlentities($_POST['var']));

这也应解决包含斜杠的帖子的任何问题