gpt4 book ai didi

php - 挑战 - 安全而准确地逃离此文本

转载 作者:行者123 更新时间:2023-12-01 03:55:39 27 4
gpt4 key购买 nike

这是我上一个问题 here. 的后续问题那里发布的答案实际上不起作用。所以这就是挑战。您将获得以下代码(假设包含 jQuery):

<input type=text>
<script>
$("input").val(**YOUR PHP / JS CODE HERE**);
</script>

使用 jQuery - 而不是通过将 PHP 输出直接注入(inject)到输入标记中 - 在输入标记中忠实地再现数据库中的任何文本。如果数据库字段显示 </script> ,该领域也应该这么说。如果里面有中文,双引号,无论如何,也复制它。假设您的 PHP 变量名为 $text .

以下是我的一些失败的尝试。

1)

$("input").val("<?= htmlentities($text); ?>");

失败:完全按照文本字段中的方式再现字符编码。
输入:$text = "Déjà vu"
输出:字段包含文字 d&eacute;j&agrave; vu

2)

$("input").val(<?= json_encode($text); ?>);

这是我上一个问题中建议的答案,我天真地接受了它。然而...
失败:json_encode仅适用于 UTF-8 字符。
输入:$text = "Va e de här fö frågor egentlien"
输出:字段为空,因为 json_encode返回null .

3)

var temp = $("<div></div>").html("<?= htmlentities($text); ?>");
$("input").val(temp.html());

这是我对奇怪角色最有希望的解决方案,除了......
失败:不对某些字符进行编码(不确定具体是哪些,不在乎)
输入:$text = "</script> Déjà"
输出:字段包含 &lt;/script&gt; Déjà

4)答案中建议

$("input").val(unescape("<?= urlencode($text); ?>"));

失败:空格仍编码为 +。

$("input").val(unescape(<?= rawurlencode($text); ?>"));

几乎可以工作。之前的所有输入都会成功,但多字节内容(例如汉字)仍保持编码状态。 decodeURIComponent也不喜欢多字节字符。

请注意,对我来说,类似 strip_tags 的东西不是一个选择。一切都必须被允许。人们正在用它来编写测验,如果有人想做一个测验来测试你的 HTML 知识,那就这样吧。另外,不幸的是我不能只注入(inject) htmlentities将文本转义到输入标记的值字段中。这些标签是动态生成的,我必须完全拆除当前的 javascript 代码结构才能做到这一点。

我觉得我在这里很出色。请告诉我我错得有多离谱。

编辑

假设用户最初输入 </script> Déjà här fö frågor 漢字进入数据库。这将被存储(您将在 phpMyAdmin 中看到它)为 </script> Déjà här fö frågor &#28450;&#23383;

最佳答案

您需要用 PHP 进行编码,并用 JavaScript 进行解码...

PHP 的 rawurlencode() :

echo rawurlencode("</script> Déjà");
//result: %3C%2Fscript%3E+D%C3%A9j%C3%A0

JavaScript 的 decodeURIComponent() :

var encoded = "%3C%2Fscript%3E+D%C3%A9j%C3%A0";
alert(decodeURIComponent(encoded));
//result: </script> Déjà

关于php - 挑战 - 安全而准确地逃离此文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com