Sti*_*gus 5 php apache .htaccess
这是布局:
web root
- admin (dir)
- index.php
- js
- img
- other files / dirs
- dir
- files
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用.htaccess passwd保护了管理员目录,因为我希望对该目录中的所有文件进行完全访问控制(包括js脚本,jpg,pdf等).另一方面,我的自定义CMS使用PHP sesssion/cookie为其他URL提供身份验证.我想要完成的是对.htaccess受保护的目录使用相同的PHP身份验证,避免为已经过PHP身份验证的用户提供用户/密码的弹出提示.综上所述:
我读过的大部分内容建议将管理目录移到Web根目录之外,并使用readfile从PHP脚本访问文件,我不想这样做.这个目录上有动态内容,还有静态内容.我知道apache会在加载任何资源之前触发auth弹出窗口,所以问题是如何让apache知道用户已经过身份验证.还有其他建议/解决方法吗?
您可以使用SetEnvIf.htaccess文件中的变量来检查是否设置了某个Cookie值.例如(这不是很安全,但仅用于说明):
AuthType Basic
AuthName "Protected Login"
AuthUserFile "/path/to/.htpasswd"
AuthGroupFile "/dev/null"
SetEnvIf Cookie PHPSESSID=.* PASS=1
Order deny,allow
Deny from all
Allow from env=PASS
Require valid-user
Satisfy any
Run Code Online (Sandbox Code Playgroud)
该行SetEnvIf Cookie PHPSESSID=.* PASS=1检查Cookie是否设置了PHP会话ID,如果是,则这Satisfy对于身份验证过程就足够了,Allow from env=PASS如果这是真的,则跳过登录提示.
同样,这个例子不是很安全,因为在session_start()没有成功的身份验证尝试的情况下调用PHP会话cookie时,所以设置一个难以猜测的更加密码/随机的cookie值会更好.例如:
SetEnvIf Cookie AJNC3Z921dmc4O8P2 PASS=1
Run Code Online (Sandbox Code Playgroud)
这样,如果您AJNC3Z921dmc4O8P2通过PHP 设置成功身份验证的cookie值,这将足以通过身份验证过程.确保设置正确的cookie过期时间,以避免人们长时间通过登录提示.
| 归档时间: |
|
| 查看次数: |
9183 次 |
| 最近记录: |