我正在编写一个插件,该插件将UNIX日期时间存储在浏览器cookie中,并使用一个基于发送当前WordPress帖子ID号的简单表单的$\\u POST变量。
在阅读了WordPress和PHP中关于清理和验证的几篇文章和帖子之后,我还没有发现任何以这种方式处理cookie数据的文章和帖子,尽管我在这个网站上读到的语句似乎表明,通过隐藏字段以编程方式设置的简单$\\u POST变量可能不需要验证或转义。
Cookie使用JSON,插件设置并解码这三个Cookie,所有这些Cookie都包含简单的数组,以Post ID为键,以UNIX datetime为值。除了在条件中相互比较之外,有时还会转换和显示datetimes。
现在,在NetBeans上,每当代码使用COOKIE变量时,我都会收到“请勿直接访问超全局COOKIE数组”的警告,即使我只是检查它是否已设置,如下所示:
if (isset($_COOKIE[\'new_session\'])) {
//stuff
}
(是的,我知道,如果您想通过插件或其他代码启用WordPress的$\\u会话,您也可以启用该会话-我决定反对该路线,但如果有人给我这样做的理由,我仍然可以说服我改变主意!)
我在提取数据时也会收到警告,例如:
$prev_visit = json_decode( stripslashes( $_COOKIE[\'prev_visit\'] ), true );
编辑:UNIX日期时间作为结果中的值进行访问
$prev_visit
大堆因此,为了获得日期时间,我们使用
$prev_visit[$id]
, $id是从get\\u the\\u id()直接或间接(在第二种情况下通过下面的$\\u Post变量)派生的WP Post id号,并用作键。
POST变量
对于$\\u POST数据,正如我所说,它是通过一个简单的表单创建的:用户按下按钮,隐藏输入发送Wordpress POST ID号作为“标记所有已读”值。关键线路:
$id = get_the_ID();
在PHP中创建按钮/表单:
$mark-all-read-button .= \'<input type="hidden" name="mark-all-read" value="\' . $id . \'" />\';
在下一次刷新(操作添加到“init”)时,我们检查
\'mark-all-read\'
设置,如果设置了,则使用$id为上述cookie[编辑:]设置键,如上面更一般的示例所示。(这就是我所说的使用通过get\\u the\\u ID()派生的ID“间接”的意思。)
我不知道这是否是在这个插件中实现我的目标的最佳方式,但到目前为止它运行得很好。然而,在我与全世界分享之前,我想知道它是否安全使用。
问题是,我们是否需要验证和/或清理上面使用的超全局,如果需要,具体如何?