我有很多 php
文件更新我的数据库,但我希望这些只有在我的代码(通常由ajax)中调用时才能工作。
现在,如果我把 php
如果我将ajax代码放入inspect元素,数据库就会更新。
我不希望人们在不应该被他们改变的信息上乱搞。
我该怎么解决这个问题?
前任。
在其中一个文件中,我将db值加1。如果我把这个文件的链接放到浏览器中,它会添加一个。如果我把ajax放到这个链接上,它也会更新db。这对网站的安全非常不利。
编辑:我试图实现最高评级的答案,但我得到的错误:
意外的标记“.”。属性名“myreq”后应为“:”。
这是我的密码:
var myreq = new XMLHttpRequest();
$.ajax({
headers: {
myreq.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
url: 'http://myurl.php',
data: {},
type: 'post',
success: function(output) {
}
});
我可能不得不把myreq部分放在beforesend下,而不是headers下,但是idk,我对这个不太熟悉。
4条答案
按热度按时间zsohkypk1#
如果要阻止直接访问php文件,并且只允许ajax调用,请参见阻止直接访问ajax函数调用的文件问题:
您可以在服务器端使用以下代码:
并为客户端的ajax请求添加标头:
使用此解决方案,您可以防止滥用在标准浏览器中打开该文件
但请记住:客户端的所有内容都可能被欺骗。因此,如果要防止滥用,就需要更改更新数据库值的方式。或者至少添加ip检查或会话检查或验证码,使黑客更难滥用。。。
在本例中,黑客可以欺骗ajax调用
php 7更新:
感谢stephen r(用于注解)从PHP7开始,您可以用以下代码替换if语句以获得更干净的代码:
tez616oj2#
你需要加入
.htaccess
文件。这里只允许index.php和所有css/js/images允许从浏览器直接url或ajax或从代码调用。
nzkunb0c3#
如果您担心安全性,您应该要求某种帐户注册,以便可以随请求发送一些身份验证数据(最好是令牌)。任何类型的客户端身份验证(我能想到的唯一原因是要求调用源自您的站点)都是一个糟糕的想法
disbfnqx4#
对于您编辑的代码,有几个问题。你不需要
XMLHttpRequest
. 如果将头作为数组提供,jquery将添加头。此外,在headers元素后面还需要一个逗号。注意,ajax函数的参数是一个数组,而headers只是该数组中的元素之一。
请尝试以下操作: