car*_*663 25 php security ajax
我目前正在构建一个Web应用程序,其中PHP文件使用jQuery的$ .ajax函数加载到主文件中.但是,只需在地址栏中输入文件名,PHP文件显然仍然可以在应用程序外部访问.
所以我的问题是什么是最好的方法来使它成为'ajaxed'的PHP文件知道它包含在正确的页面中并且将正常运行,但是如果以任何其他方式访问它(即使有人访问)是为了让他们自己的网站和我的PHP文件中的AJAX)然后该文件应该说"访问被拒绝"或其他东西.
提前致谢
Har*_*ker 56
谷歌搜索结束后的结论!
步骤1:为所有Web服务生成令牌系统:
生成令牌:
<?php
session_start();
$token = md5(rand(1000,9999)); //you can use any encryption
$_SESSION['token'] = $token; //store it as session variable
?>
Run Code Online (Sandbox Code Playgroud)
第2步:发送ajax呼叫时使用它:
var form_data = {
data: $("#data").val(), //your data being sent with ajax
token:'<?php echo $token; ?>', //used token here.
is_ajax: 1
};
$.ajax({
type: "POST",
url: 'yourajax_url_here',
data: form_data,
success: function(response)
{
//do further
}
});
Run Code Online (Sandbox Code Playgroud)
第3步:现在,让我们使用安全的ajax处理程序PHP文件,
session_start(); //most of people forget this while copy pasting code ;)
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
//Request identified as ajax request
if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="http://yourdomain/ajaxurl")
{
//HTTP_REFERER verification
if($_POST['token'] == $_SESSION['token']) {
//do your ajax task
//don't forget to use sql injection prevention here.
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}
Run Code Online (Sandbox Code Playgroud)
注意:如果是嵌入式的话,请耐心等待,但这会增加不足之处. 如果有的话,你可以简化所有这三个.增强85%的安全性!
mid*_*dus 10
引用Eran Galperin的类似讨论
正如其他人所说,可以模拟Ajax请求创建正确的标头.如果您想要进行基本检查以查看请求是否是Ajax请求,您可以使用:
Run Code Online (Sandbox Code Playgroud)if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }但是,您永远不应该根据此检查确定安全性.如果这是你需要的,它将消除对页面的直接访问.
请将Jeremy Ruten的答案考虑在内:
没有办法保证他们通过AJAX访问它.直接访问和AJAX访问都来自客户端,因此很容易被伪造.
你为什么要这样做呢?
如果是因为PHP代码不是很安全,那么使PHP代码更安全.(例如,如果你的AJAX通过用户ID到PHP文件,在PHP文件编写代码,以确保是正确的用户ID).
在上面讨论的讨论中有更聪明的想法.
小智 5
安全连接ajax和php需要某种方式.您可以使用
if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="http://yourdomain/ajaxurl")
{
//Request identified as ajax request
}
Run Code Online (Sandbox Code Playgroud)
别忘了保护php文件因为cURL可以欺骗标题.
| 归档时间: |
|
| 查看次数: |
26936 次 |
| 最近记录: |