无论如何要保护这个JavaScript请求到PHP - (是不可能的)?

时间:2013-07-19 03:32:15

标签: php javascript jquery ajax

我需要使用JavaScript访问此php。我有这么多安全访问的PHP:只有我自己的IP,只有我的域,不允许直接访问,由htaccess保护,我们知道很多其他方法来保护它。

现在我有了这个JavaScript,然后你可以访问这个JavaScript并从我的数据库中获取数据。你可以像怪物一样做...你可以把机器人发送#input1并获取我的所有数据。

我试图找到一个超过14个小时的解决方案,并阅读了很多帖子,网站但没有运气。没门。 OHHH我的上帝,这可能吗?

这是我的代码的一部分:JavaScript

$.getScript("http://www.domain.com/getdata.php?data="+$("#input1").val(), function(){
    if (resultData["field2"] != '') {
        $("#input2").val(unescape(resultData["field2"]));
        $("#input3").val(unescape(resultData["field3"]));
    }   
});

和PHP

header('content-type: application/json; charset: utf-8');

// here my get mysql connection and query.... where field1 = #input1

if ($row = mysql_fetch_assoc($res)) {
    echo "var resultData = {
        'field2'    : '" . $row['field2'] . "',
        'field3'    : '" . $row['field3'] . "',
    }";
}

我不相信我们没有解决方案!试图保护这一点,让我失去了一天!

我只需要为浏览我的网站的用户,o每个域名或每个请求保护一次= /

没办法!

3 个答案:

答案 0 :(得分:1)

在常规网页中设置会话变量,并在返回任何数据之前让getdata.php脚本检查会话变量。

答案 1 :(得分:1)

  

我们没有对用户进行身份验证。我只是不想让任何人为数据库服务器做一份艰苦的工作!

然后使用rate limiting,可能还有一些SQL查询的时间/大小限制。无需“保护对页面的访问”。

答案 2 :(得分:0)

经过一夜好眠,我的大脑可以更好地思考!我认为在javascript的url上传递了一些md5代码。然后我找到了它:

Thanks to rmorero

YEEEEEEEEEAAAAAAAHHHHHHHHHHH !!!!是吗!

在调用js:

的源文件上
$secret ="ABC1232";

$item = array(
  "time"=>time(),
  "token_id"=>"<page_url>"
);

$signed = base64_encode(hash_hmac("sha256",json_encode($item),$secret));
$item = base64_encode(json_encode($item));

$ajax_url = "myscript.php?signed=$signed&item=$item";

关于我的情况我会用这个:

getdata.php?signed=<? echo php $signed ?>&amp;item<?php echo $item ?>&amp;data="+$("#input1").val()

在php文件上,连接到你的mysql或其他东西:

$item = json_decode(base64_decode($_REQUEST["item"]));

$timeout = 3600;

if($item->time < (time()-$timeout)){
  die("Invalid token - timeout");
}

if($item->token_id !== "<page_url>"){
  die("Invalid token - page url");
}

$secret ="ABC1232";
$valid = ($_REQUEST["signed"] === base64_encode(hash_hmac("sha256",json_encode($item),$secret));

if(!$valid){
  die("Invalid token");
}

我刚刚没有测试过,但我确定,它会像怪物一样工作=)

最大的解决方案是...当你遇到这样的问题时,离开电脑,让你的大脑思考!而且,这是解决方案

在javascript的网址中传递内容,我们有很多方法可以保证安全。

现在,我要尝试使用POST代替GET =)

感谢各位帮忙。