【问题标题】:PHP - $_SERVER['QUERY_STRING'] doesn't include all the <form> entriesPHP - $_SERVER['QUERY_STRING'] 不包括所有 <form> 条目
【发布时间】:2014-02-23 22:12:26
【问题描述】:

有点奇怪... 我正在构建一个购物车。当用户输入他想要的数量并点击“添加到购物车”时,&lt;form&gt; 操作应该使用 PHP $_SERVER['QUERY_STRING'] 和一些其他信息(即产品 ID,在 MySQL 中获取)重定向他们。

这是我的表单,全部在 PHP 回显中...

<?php
echo '<form method="GET" action="cart.php?'.$_SERVER['QUERY_STRING'].'&action=add&item_id='.$data->item_id.'">
<small>Quantity </small><input type="text" size="2" placeholder="1" name="add_quantity">
<input type="submit" name="add_clicked" class="button" value="Add to Cart">
</form>';
?>

提交后,URL 会重定向到 cart.php,但只包含查询字符串,而忽略了 item id 和 action=add。

假设我在数量框中输入了“2”,URL 看起来像这样cart.php?add_quantity=2,之后什么都没有。

不胜感激! 谢谢!

【问题讨论】:

  • 我希望你知道,$_SERVER['QUERY_STRING'] 是高度 XSS vulnerable
  • 我不是,谢谢你通知我!除了htmlentities,您知道传递 query_string 的另一种方法吗?

标签: php forms get query-string


【解决方案1】:

当您通过 GET 提交表单时,表单数据提交过程将覆盖您放入 action 属性的地址中可能设置的任何现有查询字符串。

使用隐藏的表单域来传输您的附加值。

(正如@Simon 在他的评论中已经说过的那样,在输出之前从客户端发送的数据时,请阅读您必须采取哪些措施来防止 XSS。)

【讨论】:

    【解决方案2】:

    使用GET 提交表单将覆盖您在 url 中输入的任何查询字符串(我不确定您想对您的$_SERVER['QUERY_STRING'] 做什么,因为这会给出用于访问表单所在的页面。

    您需要在表单中为actionitem_id 属性使用隐藏的输入字段。

    <form method="GET" action="cart.php">
    <input type="hidden" name="action" value="add"/>
    <input type="hidden" name="item_id" value="<?=$data->item_id?>"/>
    <small>Quantity </small><input type="text" size="2" placeholder="1" name="add_quantity">
    <input type="submit" name="add_clicked" class="button" value="Add to Cart">
    </form>
    

    提交后,这将转到网址cart.php?action=add&amp;item_id=1234&amp;add_quantity=2

    您也可以(并且很可能应该)通过POST 提交表单;那么表单中的任何数据都将作为POST 参数发送,并且您的操作中定义的查询字符串参数将被保留。

    【讨论】:

      【解决方案3】:

      通过隐藏字段传递查询字符串中的信息。因此,假设您在查询字符串中传递了帐号,它看起来像这样:

      <input type="hidden" name="account_number" value="$account_number">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多