【发布时间】:2011-02-16 22:05:19
【问题描述】:
我有点迷茫,因为我是 PHP 的“绿色”。
请教我如何解决这个问题:
on 'POST' --> 从文件中替换指定的数组键:
(错误:)
<?php
$newData = $_POST["sendData"];
if(isset($_POST['sendData'])){
$file = fopen('fileToOpen.php', 'a');
foreach($file as $key => $val)
{
$data[$key] = explode("|", $val);
}
for($k = 0; $k < sizeof($file); $k++)
{
unset($data[$k][3]);
}
$data[$k][3] = "$newData";
fwrite($file, $data[$k][3]);
fclose ($file);
}
?>
这是错误的,因为它继续写:
data1|data2|data3|oldDatanewData
而不是重写:
data1|data2|data3|新数据
还有其他技术可以实现类似的效果吗?也许是file_put_contents?我错过了implode吗?
谢谢!
【问题讨论】:
-
第一个想法:将
user-submitted data写入.php文件只是要求被黑客入侵。 -
fopen返回资源,资源不能与 foreach 一起使用。提高你的 error_reporting! -
@jnpcl 感谢您的关注,这是一个 Admin 选项,因为我已经使用 md5 编写了安全登录等等...这是必须写入 fl.fi 的管理员选择。数据库,最近要重用。 :)
-
@roXon:即便如此,使用不同的文件扩展名并阻止非脚本访问文件可能更聪明。 场景:您的管理员登录 cookie 被劫持,即使您的服务器/主机/ftp 登录不同,攻击者现在也有办法写入您服务器上的
.php文件。 -
@jnpcl 有趣。我对劫持不屑一顾。但是我在服务器上创建了一个临时文件。在管理员登录时(如果输入的用户名和密码正确),管理员 IP 存储 (md5) 到文件中。所以没有设置cookies。这是个好方法吗?