我在ajax文件中使用eval()函数,该函数允许我从Javascript调用函数(类似于Securely calling PHP code from JavaScript);Php如何验证字符串是用于安全验证的特定函数
我有大约20个功能,我希望能够使用。我不想传入恶意代码。我如何验证传入的字符串是我的函数之一,仅此而已?
我在ajax文件中使用eval()函数,该函数允许我从Javascript调用函数(类似于Securely calling PHP code from JavaScript);Php如何验证字符串是用于安全验证的特定函数
我有大约20个功能,我希望能够使用。我不想传入恶意代码。我如何验证传入的字符串是我的函数之一,仅此而已?
通过使用eval
来实现这一点,您正在过度复杂化。您可以简单地在服务器端定义您的功能,并使用简单的开关盒切换到正确的功能。这样你就不必担心安全相关的问题。
的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
}
这将工作,除了一个问题。如果我的功能每个都有自己的设置/参数数量呢? – Wyatt
如果每个函数的参数不同,则可以简单地创建一个多维数组。 –
您可以使用@Hyder B
是方法。我个人认为这是最好的选择,如果你只是想调用一个函数。此外,如果您担心有人访问您的ajax文件(除了通过浏览器的源代码阅读器查看);他们也可以访问函数文件,以便在服务器上进行改进。但是,您可以通过添加这种直接阻止试图加载功能文件的人:
<?php
if (count(get_required_files()) <= 1) {
header("location: ./index.php");
}
?>
如果文件被直接访问将重定向用户。
为什么不在你的php中使用你的函数,而javascript只是传入一个值,指示你的哪个函数应该运行? – Andrew
@Andrew这就是我正在谈论的事情。我想知道如何验证它是一个函数,让黑客获得对该ajax文件的访问权限。我不希望人们通过字符串传递并在不是我的某个函数时执行它们。 – Wyatt
这取决于环境;如果你的网站是用户控制的,每个人都必须登录;那么你可以让会话和cookie为你做验证。您还可以使用'addslashes'和'htmlspecialchars'函数来过滤传入的字符串,以减少恶意数据通过的机会。 –