如何设置标题,以便只有我在数组中输入的url(例如)可以访问,并且可以将jsonp数据发送到php中的webservice,以防止随机站点将数据传递给我的服务作为用户。
类似
的调用$.ajax({
type: "GET",
dataType: "jsonp",
url: jsonpurl,
jsonpCallback: "JSONCallback",
data: {title:$("#txtTitle").val(), url:taburl},
success: function(data, textStatus) {
if(data.code > 0)
{
$("#icon").removeClass().addClass('accept');
}
else
{
$("#icon").removeClass().addClass('error');
}
},
error: function(xhr, textStatus, errorThrown) {
alert("XMLHttpRequest="+xhr.responseText+"'ntextStatus="+textStatus+"'nerrorThrown="+errorThrown);
$("#icon").removeClass().addClass('error');
}
});
或
$.ajax({
type: "POST",
url: url,
data: {title:$("#txtTitle").val(), url:encodeURIComponent(taburl)},
success: function(data, textStatus) {
if(data.code > 0)
{
$("#icon").removeClass().addClass('accept');
}
else
{
$("#icon").removeClass().addClass('error');
}
},
error: function(data, textStatus) {
alert(textStatus);
$("#icon").removeClass().addClass('error');
}
});
同时有post和get的原因是chrome和safari扩展可以很好地跨域工作,而不必将数据类型设置为jsonp,但firefox没有。
我知道有两个被否决的答案,那我选哪个呢?
差不多一年过去了,但无论如何…
如果你想允许的url在同一个网站上,你可以创建一个令牌(一个随机字符串)并将其存储在会话中,然后在你的JS请求中使用它。
像这样:
function generateToken($length = 10)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
// Before outputing the javascript
if(empty($_SESSION['token']) $_SESSION['token'] = generateToken();
然后你在ajax调用中使用$_SESSION['token']在GET或POST中传递它,然后在PHP中交付服务之前,测试来自JS的提供的令牌是否与SESSION中的令牌相同。
您可以使用Referer (sic)报头($_SERVER['HTTP_REFERER']
)查看JSONP请求的来源,并基于此进行筛选。
我不知道是否可以通过标题,但您可以使用:
preg_match() and SERVER[REQUEST_URI]