我正在使用一个javascript文件,该文件对php文件(邮件发件人)进行ajax调用。
我不希望有人构建一个只使用正确的参数调用php页面的机器人,所以我希望其中一个参数是一个令牌字符串,然后php可以与存储在服务器端的字符串进行比较。
所以我创建了一个创建随机字符串并将其保存到storageSession的php,然后回应它。
我的JS有一个运行该PHP文件的ajax调用,以获取令牌......但由于某种原因,它没有。
不幸的是,我无法在这里写作我工作的地方,我无法安装chrome扩展程序(毕竟我不是程序员,只是一个不想让网站出现最糟糕漏洞的编辑)我无法看到家里的代码。
我希望我的记忆力很好。
function generateRandomString() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$String = '';
for ($i = 0; $i < 20; ++$i) {
$String .= $characters[rand(0, $charactersLength - 1)];
}
$_SESSION['token'] = $String;
echo $String;
}
var myId;
$ajax(token){
data: ''
type: 'text'
success{
myId=token;
console.log(myId);
}
控制台显示“未定义”。 为什么呢?
答案 0 :(得分:3)
$_SESSION
是一个数组。您必须以这种方式分配变量:
$_SESSION['token'] = "myValue";
[]
不是()
。此外,不要忘记在每个页面上开始您的会话。
要生成随机令牌,如果您使用的是PHP7,则可以使用random_bytes
导致类似的事情:
$_SESSION['token'] = random_bytes(12);
您提供的伪代码难以理解实际代码是什么。您能否提供确切的代码(如果您想保密,可以使用令牌生成除外)?
此外,你不应该尝试实现自己的安全系统,开发人员,甚至老年人,总是失败。例如,您可以使用this library,由已知的加密人员完成。
答案 1 :(得分:0)
function generateRandomString() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$String = '';
for ($i = 0; $i < 20; ++$i) {
$String. = $characters[rand(0, $charactersLength - 1)];
}
$_SESSION['token'] = $String;
echo $String;
}
var myId;
$ajax(token) {
data: ''
type: 'text'
success {
myId = token;
console.log(myId);
}
}