如何设置标题,以便只有我在数组中输入的url(例如)才能访问,并且可以将jsonp数据发布到php中的web服务,以防止随机站点将数据传递给我的服务作为用户。
调用类似
$.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没有。
更新 我知道有两个downvoted答案 - 所以我选择哪个?
答案 0 :(得分:0)
差不多一年之后,但无论如何......
如果您要允许的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中的令牌相同。如果是这样,你可以继续下去。
答案 1 :(得分:-1)
您可以使用Referer(sic)标头($_SERVER['HTTP_REFERER']
)来查看JSONP请求的来源,并根据此进行过滤。
答案 2 :(得分:-2)
不知道是否可以通过标题,但您可以使用:
preg_match() and SERVER[REQUEST_URI]
如果它不匹配就会死掉。