我正在建设一个文本共享网站,用户将上传他们的文本文件。
我想知道有人可以用什么方法攻击我的数据库和存储在我服务器上的文本文件。有什么方法可以保护他们。
发布于 2011-08-02 21:14:48
more-rewrite重写您的网址,或者使用.htaccess拒绝用户直接访问文件的权限。发布于 2011-08-02 21:33:37
最好的想法
我必须建议您使用某种框架来完成此任务。您仍然需要使用下面的一些技术(例如,file_get_contents和unlink )。
至于框架:
CodeIgniter非常简单,Symfony是一个很好的中间件--它与一个真正的对象关系管理系统结合在一起,而YAML配置给它一种更健壮的感觉。到目前为止,Zend是最强大的--它有一个包罗万象的库(它是如此令人印象深刻,以至于有一些绑定允许您在Zend的库中使用CodeIgniter或Symfony )。当然,强大的功能也会带来巨大的复杂性(除非你是Peter Parker)。
如果这不是一种选择
老实说,最好将文件存储在数据库中,而不是存储在文件系统中。readfile可能是一个主要的安全风险(它不一定是一个主要的安全风险,但实际上您必须担心它),而且您已经计划整合一个数据库。哦,还有一个额外的好处,你可以索引这些文件,这样你就可以进行合法的搜索了。
一旦使用了move_uploaded_file,就应该依次执行$input = file_get_contents($tmp_fl_name);和unlink($tmp_fl_name);,以便从文件系统中删除该文件。然后,使用PDO将数据插入数据库。然后,当您插入到数据库中时,请确保使用带有bindParam的PDOStatement,以防止bindParam注入。
它可能看起来像这样:
$tmp_file = "/path/to/temps/tmp".microtime().".tmp";
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $tmp_file);
$input = file_get_contents($tmp_file);
unlink($tmp_file);
$sth = $dbh->prepare('INSERT (:fl, NOW()) INTO USER_FILES');
$sth->bindParam(':fl', $input, PDO::PARAM_STR);
$sth->execute();发布于 2011-08-02 21:00:24
在php.net/security有一个很棒的综合报道
顺便说一下,你有个王牌名字--是你的真名吗?
https://stackoverflow.com/questions/6912464
复制相似问题