【问题标题】:Protecting HTML files with .htaccess使用 .htaccess 保护 HTML 文件
【发布时间】:2010-10-12 01:08:47
【问题描述】:

我的 PHP 应用程序使用 404 文档来生成 HTML 文件,因此对同一个 HTML 文件的多次查询只会导致生成运行一次。

我想拦截对 HTML 文件的请求,以便用户需要建立 PHP 会话才能提取文件。

在最好的情况下,SESSION ID 将用于 URL 并强制它可以用作进一步的身份验证。例如,登录会给您一个 SessionID 并让您只能访问某些 HTML 文件。

我知道通过更改我的 cookie 我可以欺骗请求,但这没关系。

我该怎么做呢?

【问题讨论】:

    标签: php html security .htaccess


    【解决方案1】:

    将缓存文件放在 Web 根目录之外,但仍位于 PHP 可以访问它们的位置。

    【讨论】:

    • 我认为这不会保护他们
    • 它们是安全的(只有 PHP 脚本能够读取它们),但它不会像直接提供静态文件那样高效(PHP 请求更昂贵,PHP 会破坏 HTTP 缓存等.)
    【解决方案2】:

    您可以使用Apache module mod_rewrite.html URL 的请求重定向到PHP 脚本:

    RewriteEngine on
    RewriteRule \.html$ script.php [L]
    

    然后,$_SERVER['REQUEST_URI'] 变量中提供了请求的 URI 路径和查询。

    【讨论】:

      【解决方案3】:
      SetEnvIf HTTP_COOKIE "PHPSESSID" let_me_in
      <Directory /www/static/htmls>
        Order Deny,Allow
        Deny from all
        Allow from env=let_me_in
      </Directory>  
      

      当然,用户可以在他的浏览器中手动创建这样的 cookie(有一些扩展可以为 Firefox 做到这一点,您可以随时编辑浏览器的 cookie 存储)。

      【讨论】:

        【解决方案4】:

        这样的东西可以工作(我还没有测试过):

        RewriteCond %{HTTP_COOKIE} PHPSESSID=([a-zA-Z0-9]+)
        RewriteCond %{REQUEST_FILENAME} %{REQUEST_FILENAME}-%1.html
        RewriteRule ^ %{REQUEST_FILENAME}-%1.html
        

        假定您将"-$session_id.html" 附加到文件名($session_id 是 PHP 的会话 ID)。

        它应该是安全的,其好处是文件由 Web 服务器直接提供,根本不需要调用 PHP。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-02
          • 1970-01-01
          • 2012-11-14
          • 2014-12-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多