【问题标题】:Meta refresh tag adds semicolons to URL (;)元刷新标签将分号添加到 URL (;)
【发布时间】:2015-07-04 23:14:54
【问题描述】:

我有一个 PHP/HTML 表单,当按下提交表单按钮时,它应该会更改数据库并将页面重定向到另一个 URL 以查看表单详细信息。下一页需要通过 GET 接收两个变量,以便从数据库中加载信息。

我在表单提交后使用以下代码行重定向页面:

echo '<META HTTP-EQUIV="refresh" Content="0;URL=http://grserviceswap.isys489.com/dev/Abraham/providerViewsAPost.php?SPPostingID=' . $PostingID . '&UserID=' . $UserID . '"/>';

问题是当它重定向时会添加两个分号,如下所示:

http://grserviceswap.isys489.com/dev/Abraham/providerViewsAPost.php?SPPostingID=7;%20&UserID=33;

分号结尾会阻止页面正确加载。我可以手动删除它,它会工作,但普通用户不会知道这样做。

如何让元刷新不添加分号?

【问题讨论】:

  • 标题字段中的属性应加引号,如0; URL='http://'
  • @mario,内容是属性,而不是元数据中的 URL。
  • @Devon 规定的HTTP header field value encoding 仍然适用于 HTML 元标记的上下文。 (即使 OP 有垃圾输入变量仍然相关。)

标签: php forms refresh meta


【解决方案1】:

您应该清理 GET 变量以防止 XSS(跨站点脚本)攻击。如果两者都是整数,则可以强制执行。

echo '<META HTTP-EQUIV="refresh" Content="0;URL=http://grserviceswap.isys489.com/dev/Abraham/providerViewsAPost.php?SPPostingID=' . intval($PostingID) . '&amp;UserID=' . intval($UserID) . '"/>';

注意,我还将 & 更改为 &amp;amp;,这是正确的 HTML 编码。

【讨论】:

  • 成功了!太感谢了!我不知道清理 GET 变量。
  • 你应该研究跨站脚本。如果任何输出 (HTML) 包含 $_GET 值,您应该对其进行清理以保护用户免受 Javascript 注入。请将此标记为已解决,因为这解决了您的问题。
  • 好的,我会调查的。非常感谢!
猜你喜欢
  • 2019-12-31
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2016-01-18
  • 2017-08-08
  • 1970-01-01
相关资源
最近更新 更多