我在 ajax 文件中使用 eval() 函数,它允许我从 Javascript 调用函数(类似于 Securely calling PHP code from JavaScript );
我想要使用大约 20 个函数。我不希望传入恶意代码。我如何验证传入的字符串是我的函数之一,仅此而已?
最佳答案
使用eval
来实现这一点会使事情变得过于复杂。您可以简单地在服务器端定义您的函数,并使用简单的 switch case 切换到正确的函数。这样您就不必担心与安全相关的问题。
jQuery:
function callPhp(func, callback){
$.ajax({
type: 'GET',
url: 'callPhp.php',
data: {action:'register'},
success: function (data) {
data = JSON.parse(data);
callback(data);
}
});
}
PHP:
<?php
$action = $_GET['action'];
switch ($action) {
case "register":
register_user();
break;
case "login":
login();
break;
?>
如果您确实想使用 eval
(我强烈建议您不要使用它),您可以简单地实现一种应在服务器端执行的方法名称白名单。
<?php
$whiteListMethod = array('register', 'login', 'forgotPassword');
$action = $_GET['action'];
// Is the user supplied function present in my whitelist?
if(in_array($action,$whiteListMethod)){
// You can call this method safely
}else{
// Hack attempt detected
}
关于javascript - php如何验证字符串是否是安全验证的某些函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172782/