【发布时间】:2017-11-28 05:27:01
【问题描述】:
我正在尝试创建一个可以普遍清理进入我的服务器的 AJAX 请求输入的函数。到目前为止,我已经创建了这个:
function sanitize($variable) {
switch(gettype($variable)) {
case "string":
////
$variable = trim($variable);
$variable = stripslashes($variable);
$variable = htmlspecialchars($variable);
break;
case "array":
foreach($variable as $key => $property) {
$variable[$key] = sanitize($property);
}
break;
case "object":
foreach($variable as $key => $property) {
$variable->$key = sanitize($property);
}
break;
}
return $variable;
}
这非常有效,甚至可以完全清理可以传递的嵌套数组、对象和字符串。但是,我想在已注释掉的行上添加 JSON 解析支持,所以我上网寻求解决方案。我在注释行的位置尝试了这三个建议的解决方案中的每一个:
$unstrung = json_decode($variable);
if(is_object($unstrung)) sanitize($unstrung);
$unstrung = json_decode($variable);
if(json_last_error() == JSON_ERROR_NONE) sanitize($unstrung);
if(!is_array(json_decode($variable, true))) sanitize(json_decode($variable));
但是,在特定情况下,这些中的每一个最终都会对字符串中的引号进行字符编码。例如,如果我发送同样编码的数据JSON.stringify(["data"]),并且我的服务器使用此函数对其进行清理并立即将其吐回,我会收到诸如"["data"]" 之类的响应。为什么我会得到这个?
【问题讨论】:
-
你为什么要这样做?最终目标是什么?
-
我希望我的清理功能能够识别 JSON、解析它并清理结果。尝试将这种支持添加到我的函数中破坏了某些字符串的处理方式,如我的帖子末尾所述。
-
.. 所以,你想清理不安全的 html 中的键和值吗?
-
是的。特别重要,因为我还将它连接到数据库。
-
直到最近,我才发现自己发送的不是离散字符串的更大信息包,使 JSON、数组和对象成为承载信息的必要手段。