我需要使用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每个域名或每个请求保护一次= /
没办法!
答案 0 :(得分:1)
在常规网页中设置会话变量,并在返回任何数据之前让getdata.php脚本检查会话变量。
答案 1 :(得分:1)
我们没有对用户进行身份验证。我只是不想让任何人为数据库服务器做一份艰苦的工作!
然后使用rate limiting,可能还有一些SQL查询的时间/大小限制。无需“保护对页面的访问”。
答案 2 :(得分:0)
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 ?>&item<?php echo $item ?>&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 =)
感谢各位帮忙。