我有一个代码库,开发人员决定使用AND而OR不是&&和||.
我知道运营商的优先级(&&之前and)有所不同,但是对于给定的框架(PrestaShop来说准确),显然不是理由.
你使用的是哪个版本?是and不是更具有可读性&&?或者没有区别?
如果对我的php页面的请求是ajax请求,我想检查服务器端.
我看到了两种方法:
第一种方式:GET在请求中发送一个参数,告诉页面这是一个AJAX请求(= mypage.php?ajax)
mypage.php:
if(isset($_GET['ajax'])) {
//this is an ajax request, process data here.
}
Run Code Online (Sandbox Code Playgroud)
第二种方式:设置标题为xmlHttpRequest:
客户端js:
xmlHttpRequestObject.open(“GET”,url,true);
xmlHttpRequestObject.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
Run Code Online (Sandbox Code Playgroud)
mypage.php:
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) {
//request is ajax
}
Run Code Online (Sandbox Code Playgroud)
事实是,这两种方式很容易被黑客攻击,因此检查我是否收到这样的AJAX请求是不安全的.
如何检查我是否收到了AJAX请求?
我有一个页面通过Ajax加载其他页面(想想框架,除了没有框架).
显然这些页面都可以独立调用,所以我想检测它们是否通过Ajax调用,如果没有,则重定向到主Ajax页面.
页面是php页面,所以我也可以访问它.
指数:
goto = "StandalonePrograms.php";
var clear = "<br style='clear:both;'>"
if(goto != ''){
$.ajax({
url: goto,
context: document.body,
success: function(data){
$('#mainwindow').html(data + clear);
$('#mainwindow').find("script").each(function(i){
eval($(this).text());
});
}
});
}
Run Code Online (Sandbox Code Playgroud) 如果我对php脚本进行AJAX调用,就像这样(使用jQuery)
$.ajax(url: "../myscript.php");
Run Code Online (Sandbox Code Playgroud)
并且myscript看起来是这样的:
<?php
//code that does something to db
?>
Run Code Online (Sandbox Code Playgroud)
我想知道如何防止用户只是去example.com/myscript.php来执行脚本.
是否可以检查是否从特定页面提交了这些$_GET或者$_POST值?
例如,有一个ajax在page1提交的价值page2.php?q=abc,而page2只接受q当它从提交page1.
如果我直接浏览到该页面page2.php?q=abc,php除非我提交了值,否则不会运行page1.
有可能吗?
编辑1:
因为我可以访问page2并获得结果.不要提及session,因为我可以验证session匹配我的需求,提交给php的值是否有效.
我想要的是检查请求是否从特定页面发送.如果为true,则接受值并处理它,否则,重定向到主页或其他内容.
编辑2:我的问题是,不仅是通过Ajax提交的值,还有直接访问,例如href="page2.php?q=abc".我想令牌将是最好的方法,查询部分将再次验证.
我想确定是否已经从jQuery $.ajax()方法向REST API发出了请求.
在使用向发送到服务器的数据添加布尔值或添加标头的明显答案之一回答此问题之前,我不想这样做...
显然这可以这样实现:
$.ajax({
data: {
sentViaAjax: 'true'
}
});
Run Code Online (Sandbox Code Playgroud)
但是,出于各种原因,我希望布尔/附加标头保持对代码隐藏.
因此,我想知道的是jQuery在发出请求时是否以任何特定形式将任何其他数据发送到服务器?
我已经尝试打印出$_REQUEST阵列,但除了发送的数据之外,它不包含任何内容.是否有任何独特的标题需要注意?如果是这样,它们是否可靠,如果它们一直存在吗?