插件审查小组拒绝了我的插件,因为他们说我没有清理数据。以下是片段:
function add_cookie_to_order( $order_id ) {
if ( isset( $_COOKIE[\'tm_clickid\'] ) && preg_match( \'/^[A-Z][A-Z][A-Z]?[0-9a-f]{32}$/\', $_COOKIE[\'tm_clickid\'] ) ) {
update_post_meta( $order_id, \'tm_clickid\', $_COOKIE[\'tm_clickid\'] );
}
}
我指出
preg_match
非常严格,只允许2或3个大写字符+32个十六进制字符,但他们回答:
如您所见,我们在第54行(之前的第52行)使用preg\\u match进行消毒。
除非你不是。您正在进行验证,但由于检查和保存之间存在差距,您将面临MITM攻击。这就是为什么你总是在储蓄时进行消毒。这就是为什么我们这样说:
您仍然需要进行清理,因为一次适时的MITM攻击将消除您的检查。
我真的不明白在哪里;检查和保存之间的间隙;是的,MITM怎么可能发生。。。
这样可以吗?(我没有看到任何安全性的提高,只有无用的开销):
if ( isset( $_COOKIE[\'tm_clickid\'] ) && preg_match( \'/^[A-Z][A-Z][A-Z]?[0-9a-f]{32}$/\', $_COOKIE[\'tm_clickid\'] ) ) {
$tm_clickid = sanitize_text_field( $_COOKIE[\'tm_clickid\'] );
update_post_meta( $order_id, \'tm_clickid\', $tm_clickid );
}
SO网友:the_nuts
这是WordPress插件审查小组的官方答案:
PHP一次运行一个进程。
如果步骤1为;“验证”;步骤2是保存,然后在步骤1和步骤2之间发生MITM。
现在你可能会想;但是拜托,这里什么都不可能发生!那太快了"E;很有可能你是99%正确的。但是那百分之一值得冒险吗?不,当你可以把它包装起来,清洗干净,从一个比你或我更聪明的黑客手中拯救自己的时候就不行了。
记住,很多人都会说“你确定吗?”事实上,我们从来没有。
这很好:
函数add\\u cookie\\u to\\u order($order\\u id){if(isset($\\u cookie[\'tm\\u clickid\'))&preg\\u match(\'/^[A-Z][A-Z][A-Z][A-Z]?[0-9a-f][32}$/\',$\\u cookie[\'tm\\u clickid]){$tm\\u clickid=清理\\u文本字段($\\u cookie[\'tm\\u clickid\');更新\\u post\\u meta($order\\u id,\'tm\\u clickid\')。,$tm\\u clickid);}}}
因此,您必须这样做,并通过wordpress sanitize函数传递变量,才能批准插件。