这是我使用Ajax保存数据的当前JS
$.ajax({
type: "POST",
url: "/myPhpCode.php",
data: "field1=" + field1 + "&field2=" + field2,
success : function(text){
if (text == "success"){
functionForSucess();
} else {
functionForError();
}
}
});
现在我需要一个Ajax代码,它只是跟踪一个按钮的点击(不是"提交"),只需将数据库中的用户IP地址和当前日期(从PHP生成)插入数据库文件)。
我可以做PHP代码,但不知道如何做Ajax部分。我担心用户只是简单地输入我的PHP文件到地址栏,因为我没有发布任何用户输入,所以PHP无法检查用户是否点击了按钮或只是输入了浏览器地址栏中的PHP文件。
我想要我的Ajax点击跟踪代码
function showDiv(id) {
var e = document.getElementById(id);
e.style.display = "block";
$.ajax({
// Ajax part here
});
}
答案 0 :(得分:0)
令牌生成:
<?php
session_start();
$token = md5(rand(1000,9999)); //you can use any encryption
$_SESSION['token'] = $token; //store it as session variable
?>
AJAX:
<?php session_start(); ?>
var var1 = "whatever";
var var2 = "whatever";
var token = "<?php echo $_SESSION["token"]; ?>";
var SendInfo= { "var1": var1,
"var2": var2,
"token": token };
$.ajax({
type: 'POST',
url: 'yoururl.php',
data: SendInfo,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
traditional: true,
success: function (data) {
// stuff here
}
});
处理程序:
session_start();
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.
}
}
注意:除了$ _SESSION之外,所有这些信息都可以被欺骗,因此存储与用户在SESSION对象中操作有关的任何变量,因为使用POST等安全性在此实例中不起作用 您希望防止外部使用您的软件。这样做可以确保建立有效的会话对象(也就是用户已登录)。
答案 1 :(得分:0)
创建元标记后,您可以指示库 jQuery将令牌添加到所有请求标头。这提供简单, 为基于AJAX的应用程序提供方便的CSRF保护:
$ .ajaxSetup({headers:{'X-CSRF-TOKEN': $('meta [name =“csrf-token”]')。attr('content')}});
$.ajaxSetup({
headers:
{ 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
});
$.ajax({
url: "/your/url",
method: "POST",
data:
{
a: 'something',
b: 'something else',
},
datatype: "json"
});
request.done(function(msg) {
});
request.fail(function(jqXHR, textStatus) {
});
单击按钮
$('#btnID').on('click',function(){
ajax here
});