无论如何,要将这个JavaScript请求安全地发送到PHP-(这是不可能的)



我需要用JavaScript访问这个php。我有这个php可以通过多种方式进行安全访问:只用于我自己的ip,只用于我的域,不允许直接访问,由htaccess保护,我们知道很多其他方法来保护它。

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

我花了14个多小时试图找到一个解决方案,阅读了许多帖子和网站,但没有成功。没门。天啊,这可能吗?

这里是我代码的一部分: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可能每个域,或每个请求=/

没门!

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

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

然后对SQL查询使用速率限制,也许还有一些时间/大小限制。无需"保护对页面的访问"。

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

感谢rmorero

耶耶耶耶啊啊啊啊hhhhhhhh!!!!是吗!

在调用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的url中传递一些东西,我们有很多方法可以确保安全

现在,我将尝试使用POST而不是GET=)

谢谢你们的帮助。

最新更新