[英]PHP Using MD5 to secure a $_GET function
我在php中使用$ _GET函数为Java服务器执行功能。
该网站与此类似: http : //api.somewebsite.com/perform/function.php?authkey1=randomMD5&authkey2=randomMD5¶meters=something
其中变量authkey1和authkey2代表随机生成的MD5。 PHP脚本确实连接到MySQL,并且我已经阻止了注入。 但是,在代码解析任何其他内容之前,URL必须包含这两个authkey,否则它们将收到一条消息,提示“身份验证不正确”。
这是我的代码的示例:
// Security key check
$key1 = "skghlskfhgj42u6928749856478937683471095sndgfnsvnrandom";
$key2 = "dbnksgh794ytowhjklgn934ngmsnnmlrj9096345u075u80375ngsr";
$g_key1 = $_GET['authkey1'];
$g_key2 = $_GET['authkey2'];
if (empty($g_key1) || empty($g_key2)) {
die("Improper authorization");
}
if ($g_key1 != $key1 || $g_key2 != $key2) {
die("Improper authorization");
}
// If authentication passes, move on to other functions
这种方法是否安全? 谢谢!
您拥有两个秘密密钥,这是对的,但是上面注释中的人都是正确的。 这不是特别安全。 我该怎么办? 我将为您的两台服务器知道一个共享密钥。 像
$key1 = "skghlskfhgj42u6928749856478937683471095sndgfnsvnrandom";
该键成为您对所有参数执行某种操作的关键。 两台服务器都使用salt来构建哈希,该哈希在请求中传递。 脚本的接收端将检查以确保传递的哈希与从请求构建的哈希相同。
$passed_hash = $_GET['hash'];
$params = $_GET;
unset($params['hash']);
ksort($params);
$str = '';
foreach($params as $k => $v){
$str .= $v;
}
// the key is the salt
$str .= $key1;
$calculated_hash = md5($str);
if($passed_hash == $calculated_hash){
// you know everything is good
}
确保在请求中包含时间戳,因此没有两个请求是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.