关闭Apache的目录浏览功能

转自:http://bbs.51cto.com/thread-572324-1.html

今天在调整网站架构时,突然发现可以直接浏览到子目录下的结构和文件。我觉得这是一个比较危险的情况,特别是Apache配置中是打开该选项的,有必要关闭它。

一、默认情况
默认情况下,Apache的配置文件/etc/httpd/conf/httpd.conf中有如下参数:

引用
<Directory "/var/www/html">
Options Indexes FollowSymLinks
......
</Directory>


也就是说,在目录下没有默认首页面(如:index.html index.php等)时,可以让用户直接浏览web目录架构,这可能会导致一些重要的目录或配置文件被公开。

通常在Web应用上也会做一些安全考虑,以Bo-Blog为例,一些目录下会有类似的文件:

引用
# cat inc/index.php
<?php
die ('Access Denied');


这样,可以避免用户直接浏览该目录时,看到整个目录结构。但如果访问它下面的子目录就没什么作用了:
 
所以,这还是不太安全。

二、修改配置文件
安全起见,我建议还是把Indexes选项关闭比较好,方法有两种:
1、全局关闭
修改上面提到的配置文件/etc/httpd/conf/httpd.conf,把:

引用
Options Indexes FollowSymLinks


改为:

引用
Options -Indexes FollowSymLinks


重启httpd服务即可,这样可以把所有网站的Indexes选项都取消。

2、修改.htaccess文件
如需要针对特定的网站取消该功能,可以先打开.htaccess支持,修改/etc/httpd/conf/httpd.conf:

引用
<Directory "/var/www/html">
......
    AllowOverride None
......
</Directory>


修改为:

引用
<Directory "/var/www/html">
......
    AllowOverride All
......
</Directory>


然后,在各网站的主目录下写入一个.htaccess文件,内容有:

引用
# head .htaccess
Options -Indexes

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
......


保存后马上生效。

这时,访问同样的路径,就会报下面的错误提示:
 
※ 从服务层面去屏蔽类似的问题,会比从应用层面解决要更安全和可靠。很多应用程序的默认设置都是比较宽松的,所以,在对外公布网站的时候,务必做好类似的安全检查,防止漏洞和隐患。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Android Apache POI 文件浏览功能,可以按照以下步骤进行: 1. 在项目的 build.gradle 文件中添加 Apache POI 的依赖项: ``` implementation 'org.apache.poi:poi:4.1.2' implementation 'org.apache.poi:poi-ooxml:4.1.2' ``` 2. 在布局文件中添加一个用于显示文件内容的 TextView: ``` <TextView android:id="@+id/tv_file_content" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="16sp" android:padding="16dp" /> ``` 3. 在 Activity 中获取传递过来的文件路径,并使用 Apache POI 读取文件内容: ``` private void readExcelFile(String filePath) { try { InputStream inputStream = new FileInputStream(new File(filePath)); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFSheet sheet = workbook.getSheetAt(0); StringBuilder sb = new StringBuilder(); for (Row row : sheet) { for (Cell cell : row) { sb.append(cell.toString()).append("\t"); } sb.append("\n"); } tvFileContent.setText(sb.toString()); workbook.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } ``` 4. 在 Activity 的 onCreate 方法中获取传递过来的文件路径,并调用 readExcelFile 方法: ``` @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_file_viewer); tvFileContent = findViewById(R.id.tv_file_content); String filePath = getIntent().getStringExtra("FILE_PATH"); readExcelFile(filePath); } ``` 这样就可以实现 Android Apache POI 文件浏览功能了。当用户点击一个文件时,可以将文件路径传递给该 Activity,然后在该 Activity 中读取文件内容并显示在 TextView 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值