我读到这样的东西可能存在安全风险:
调用文件:
<p><a href="'.plugin_dir_url( __FILE__ ).'form-add-edit.php?funct=add_edit_form">Add a Date</a></p>
被调用的文件/函数顶部有以下内容:
<?php
if ( $_GET['funct'] == 'add_edit_form' ) {
add_edit_form();
} else {
die;
}
function add_edit_form() {
etc.
?>
如果答案是否定的,那么最佳做法是什么?我考虑过jQuery/ajax,但这似乎并没有更好。
更新:以上内容未经测试。这就是真正有效的方法,无论是否安全:
if ( isset($_GET['funct']) && $_GET['funct'] == 'add_edit_form' ) {
add_edit_form();
}
如果做得好,它可以避免web应用程序的路由。我已经为我的应用程序实现了这个方案,但我不能推荐这种方法用于网站,因为URL对SEO不友好。
正如其他人所指出的,危险在于允许任何人在你的机器上执行arbitrary代码。为了避免这种情况,您需要首先对输入进行消毒。它可以通过Reflection来完成,因为只允许执行一种类型的类,只使用标量参数。
该方法的一大缺点是反射相对较慢,因此在该方案的性能方面取得成效之前,(到函数的(路由数量需要相当大。还有其他缺点,例如,当你想要面包屑时,你仍然需要有类和函数的分层映射,这使得传统路由的选择更加明显。