Jam*_*Gen 0 javascript php login
由于我的登录不起作用,我使用PHP和JavaScript这样做.
PHP:
$users = sql("SELECT * FROM USERS WHERE SITE_ID='${CONFIG["ID"]}'");
if($_REQUEST["logindata"]){
$logindata = $_REQUEST["logindata"];
$now = array_shift(explode(" ",microtime()));
if($_REQUEST["time"] < strtotime("+10 sec",$now) && $_REQUEST["time"] > strtotime("-10 sec",$now))
exit(json_encode(array("TYPE"=>"FUNCTION","FUNCTION"=>"(\$login.failed(\"Time out for this request.. (Go away bots)\"))")));
foreach($users as $user){
if(hash_hmac("sha1",$user["LOGIN_SALT"],hash_hmac("sha1",$_SERVER["REMOTE_ADDR"],$_REQUEST["time"])) == $logindata){
$_SESSION = $user;
$_SESSION["ACTIVE_IP"] = $IP;
sql("UPDATE USERS SET ACTIVE_IP='${IP}' WHERE LOGIN_SALT='${user["LOGIN_SALT"]}'",0);
$result = json_encode(array("TYPE"=>"FUNCTION","FUNCTION"=>"(\$login.success())"));
}
}
!$result ? $result = json_encode(array("TYPE"=>"FUNCTION","FUNCTION"=>"(\$login.failed())")) : void;
}
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
login: (function () {
$("#ajax_loading").fadeIn("fast");
$("[type=submit]").fadeOut("fast");
$tmp.time = "" + (new Date()).valueOf();
return $functions.request({
type: "plugin",
plugin: "login",
time: $tmp.time,
logindata: $.sha1($.sha1($.sha1($("#username").val(),$("#password").val()),$client.domain),$.sha1($client.IP,$tmp.time))
});
}),
Run Code Online (Sandbox Code Playgroud)
$ .sha1函数,如果给出一个字符串,则为sha1,如果为2,则会给出hmac_sha1结果.
首先:看一看时间并进行比较.
(new Date()).valueOf();
Run Code Online (Sandbox Code Playgroud)
- 会给你微秒,而
array_pop(explode(" ",microtime()));
Run Code Online (Sandbox Code Playgroud)
- 只返回秒.所以你的比较永远不会匹配.
但是,比较客户端时间和服务器时间并不是一个好主意,因为您假设两者具有相同的正确时间集,并且位于同一时区.
如果你真的喜欢这样的比较,请在开始时为javascript提供服务器端时间戳,并在将经过的秒数提交到该时间戳之前添加并将其用作$ tmp.time
但是你会这样做,如果你发送它们,像时间,域或IP这样的东西几乎是无用的,虽然它们不可靠并且可以很容易伪造.
还有什么:你最好使用你的DBMS可以自己处理的哈希值,这样你就可以直接使用Query获取你想要的1个用户,而不必遍历所有用户
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |