【问题标题】:Avoid Quotation Marks without htmlspecialchars避免使用没有 htmlspecialchars 的引号
【发布时间】:2017-09-27 19:39:04
【问题描述】:

我有以下 search.php 文件:

<?php
$q = $_GET["q"];
?>

<html>
...
<input id="inp" type="text">
...
...
<script>
// here i'm trying to avoid harmful user input with htmlspecialchars        
document.getElementById("inp").value = "<?php echo htmlspecialchars($q); ?>"; 
</script>
...
</html>

当我请求 search.php?q=Adam(或任何 A-Z、a-z)时,它工作正常。但是当我搜索 " 或 \ 输入值不同于 $_GET["q"] 值时。

但如果我搜索 " 它会添加 \,请参见下图。

我需要的只是将输入值设置为 $_GET["q"]。有没有更好的解决方案?

【问题讨论】:

  • $q = htmlspecialchars($_GET["q"])
  • @SagarV — 第二次使用htmlspecialchars 有什么帮助?

标签: javascript php


【解决方案1】:
// here i'm trying to avoid harmful user input with htmlspecialchars        
document.getElementById("inp").value = "<?php echo htmlspecialchars($q); ?>";

您生成的是 JavaScript,而不是 HTML。

(虽然它嵌入在 HTML 文档中,但 &lt;script&gt; 元素被定义为包含 CDATA,因此不适用 HTML 的常规规则)。

将 PHP 数据结构或原语转换为 JavaScript 兼容格式的合适工具是 json_encode

document.getElementById("inp").value = <?php echo json_encode($q); ?>;

【讨论】:

  • 感谢您的回复。我用 json_encode() 替换了 htmlspecialchars()。大多数角色都可以正常工作。但是当我搜索 " 或 / 它在该字符之前添加另一个 \。例如,我搜索 "" 并且输入值更改为 \"\" 这不是很好。
  • @bored_lines — 听起来你开启了魔法行情。 Turn them off。更好的是:升级 PHP。魔术引号在 PHP 5.4 中被删除,在 2015 年停止获得安全修复。
  • 我的 PHP 版本是 7.1.1,我也运行这个:if (get_magic_quotes_gpc()) { echo "on";} else { echo "off"; } 并且它返回了。我试过php函数addlashes($q);它也做同样的事情。
  • 那么你不应该得到 \ 添加。我无法重现该问题。
  • 是的,你是对的。这是我的错误,它是我声明的代码的开头 $q = $_GET["q"];但是有一行 $q = mysqli_real_escape_string($con, $q);这就是问题所在。感谢您的帮助!
猜你喜欢
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多