PHP保护文件系统的具体代码分享
文件系统对于任何一个站点来说都是相当重要的,程序员们都在不遗余力的保护着自己的系统不受侵犯。今天我们就为大家讲解了PHP保护文件系统的具体代码示例。曾经有一个 Web 站点泄露了保存在 Web 服务器的文件中的客户数据。该 Web 站点的一个访问者使用 URL 查看了包含数据的文件。虽然文件被放错了位置,但是这个例子强调了针对攻击者保护文件系统的重要性。
应用程序对文件进行了任意处理并且含有用户可以输入的变量数据,请仔细检查用户输入以确保用户无法对文件系统执行任何不恰当的操作。清单 1 显示了下载具有指定名的图像的 PHP 站点示例。- <?php
- if ($_POST[submit] == Download) {
- $file = $_POST[fileName];
- header(Content-Type: application/x-octet-stream);
- header(Content-Transfer-Encoding: binary);
- header(Content-Disposition: attachment; filename= . $file . ; );
- $fh = fopen($file, r);
- while (! feof($fh))
- {
- echo(fread($fh, 1024));
- }
- fclose($fh);
- } else {
- echo(<html><head><);
- echo(title>Guard your filesystem</title></head>);
- echo(<body><form id=myFrom action= . $_SERVER[PHP_SELF] .
- method=post>);
- echo(<div><input type=text name=fileName value=);
- echo(isset($_REQUEST[fileName]) ? $_REQUEST[fileName] : );
- echo( />);
- echo(<input type=submit value=Download name=submit /></div>);
- echo(</form></body></html>);
- }
正如您所见,清单 1 中比较危险的脚本将处理 Web 服务器拥有读取权限的所有文件,包括会话目录中的文件(请参阅 “保护会话数据”),甚至还包括一些系统文件(例如 /etc/passwd)。为了进行PHP保护文件系统演示,这个示例使用了一个可供用户键入文件名的文本框,但是可以在查询字符串中轻松地提供文件名。
同时配置用户输入和文件系统访问权十分危险,因此最好把应用程序设计为使用数据库和隐藏生成的文件名来避免同时配置。但是,这样做并不总是有效。清单 2 提供了验证文件名的示例例程。它将使用正则表达式以确保文件名中仅使用有效字符,并且特别检查圆点字符:..。
- function isValidFileName($file) {
- /* dont allow .. and allow any word character / */
- return preg_match(/^(((?:.)(?!.))|w)+$/, $file);
- }
以上就是本文为大家分享的PHP保护文件系统的具体代码编写。
永久地址:http://www.phprm.com/frame/php1003572.html
转载随意~请带上教程地址吧^^
- 上一篇: PHP函数array_merge()与加号运算符的不同之处
- 下一篇: 探讨主要的PHP应用领域