我用PHP调用的数据文件神秘地被更改了.用户是否覆盖了它
The data file I call with my PHP was mysteriously changed. Did a user overwrite it?
我对PHP功能很感兴趣,但我对PHP安全性知之甚少 - 当然,这是一件大坏事。我正在自学这种语言,但资源有时比有用的要少一点。
我刚刚做了这个愚蠢的小网站:
http://www.ineedaprompt.com/
你可以看到,在"再次!"按钮的正下方是一个计数器。它显示单击按钮的次数。每次单击该按钮时,我的JS都会对PHP文件(计数器.php)进行Ajax调用,该文件会更新此文件:
http://www.ineedaprompt.com/counter.txt
每 100 毫秒,我使用 Ajax 调用来使用计数器文件的内容更新该计数器字段的值。
计数器最近远远超过100,但随后突然回落到0并重新开始。外部人员覆盖该计数器.txt文件有多容易?我该如何预防?
注意:我的.htaccess文件中没有任何与PHP有关的内容,因为我不确定要放什么。
请原谅我的无知和TMI,谢谢!
编辑:你们的速度非常快。
这是计数器.php代码:
<?php
$counter = file_get_contents("counter.txt");
$counter++;
file_put_contents("counter.txt", $counter);
?>
。以及我的JS中单击按钮时激活的代码:
$("#button").click(function(){
$.ajax("counter.php");
});
。以及我的 JS 中每 100 毫秒激活一次的代码:
window.setInterval(function(){
$.get("counter.txt", function(result){
$("#counter").html(result);
});
}, 100);
计数器没有限制。它实际上只是一个带有单个数字的文本文件。
写入数据时需要锁定文件,因为操作系统无法同时处理多个读取和写入,我在下面的站点中使用了,现在我的问题也解决了。我希望它对您和其他人有所帮助。
if( $fl = fopen("counter.txt", "r+") && flock( $fl , LOCK_EX ) )
{
//empty the file
ftruncate($fl, 0);
//move file pointer to beginning
fseek($fl, 0);
//write
fwrite($fl, $content);
fflush($fl);
flock($fl, LOCK_UN);
fclose($fl);
}
"counter.txt"文件的读取和写入可能同时发生,当文件为空时调用file_get_contents("counter.txt")
时,它会返回一个空白字符串。
然后,当您递增时,$counter++;
空白字符串,它变为"1"。并且"1"被写入文件。
您可以尝试锁定文件,这里有一个带有一些示例代码的 SO 答案:在保持锁定的同时读取和写入文件
- 如何使用jquery确定用户是否年满18岁
- javascript跨浏览器确定用户是否滚动到页面底部
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 如何检查用户是否使用$routeChangeStart登录angularjs
- 如何检测用户是否在同一会话中打开了多个窗口或选项卡
- 询问用户是否要打开地理位置
- 检测用户是否具有打印功能
- 检查用户是否在Orchard CMS中获得授权
- HTML.如何检查用户是否在表单中输入了文本
- 如何检查用户是否开始关注
- 检查用户是否正在访问纯根url
- 检测用户是否有从其重定向的意图's页
- 如何发现用户是否使用jQuery滚动到HTML容器的末尾
- 使用jQuery检测用户是否退出全屏视频
- 检查用户是否具有角色分析云代码
- 如何检查用户是否已经在NodeJs-Mongoose中关注其他用户
- 检查请求的用户是否是django中的所有者
- 如何检测用户是否移动了滚动条
- Facebook JavaScript SDK 检查用户是否为粉丝(错误:指定的版本无效)
- 有没有办法检测用户是否真的远离计算机