mrp*_*atg 1 php .htaccess lamp
在客户端的开发站点上工作,我们希望拒绝来自它的所有访问,但允许在不在办公室或在家工作时容易白名单(动态IP).
我们想要发生的是,有一个表单,将您的IP地址写入htaccess文件以及上面的注释,说明这是谁或谁授权它等.
没有进入一堆细节,一个简单的密码在我们的情况下不起作用,让人们监视电子邮件帐户的请求,让客户获得自己的IP地址,这样的事情就是不会飞.
什么会好,是允许htaccess中这些添加的IP地址到期.所以我认为复杂的逻辑就像在htaccess本身不会飞,所以它需要由第三方软件管理,除非有人有任何其他想法?
我建议使用Apache的RewriteMap指令.请注意,要使用RewriteMap指令,您必须将指令放在httpd.conf而不是.htaccess文件中.您可以通过几种简单的方式使用它.
纯文本版本允许您拥有一个保存IP地址的.txt文件.我添加了一行评论.这种方式不允许自动过期.
httpd.conf文件
RewriteEngine on
RewriteMap ipmap txt:/path/to/whitelist.txt
RewriteCond ${ipmap:%{REMOTE_ADDR}} !^allow$ [NC]
RewriteRule .* - [F,L]
Run Code Online (Sandbox Code Playgroud)
whitelist.txt
# Chris London added this 2013/06/14
127.0.0.1 allow
123.45.67.89 allow # Some other comment
Run Code Online (Sandbox Code Playgroud)
使用RewriteMap,您实际上可以让它运行外部程序,但这个有一些警告.我个人没有使用过这种方法,尤其是PHP脚本.为了使它能够与PHP脚本一起工作,我相信,它必须无限期地运行stdin并写入stdout.
RewriteEngine on
RewriteLock /path/to/rewrite.lock
Rewritemap ipmap prg:/path/to/executable.php
RewriteCond ${ipmap:%{REMOTE_ADDR}} !^allow$ [NC]
RewriteRule .* - [F,L]
Run Code Online (Sandbox Code Playgroud)
executable.php
#!/usr/bin/php
<?php
$in = fopen('php://stdin', 'r');
$out = fopen('php://stdout', 'r');
while ($ip = fgets($f)) {
// TODO add better logic
if ($ip == '127.0.0.1') {
fwrite(out, 'allow');
} else {
fwrite(out, 'deny');
}
}
fclose($f);
Run Code Online (Sandbox Code Playgroud)
我还没有用过这个,但它看起来很整洁.需要将mod_dbd配置为指向正确的数据库才能使其正常工作.您有一个获取IP地址的SQL语句,您可以为过期日期添加过滤器.
RewriteEngine on
RewriteMap ipmap "dbd:SELECT ipaddress FROM rewrite WHERE expiration < TIME() and ipaddress = %s"
RewriteCond ${ipmap:%{REMOTE_ADDR}} !^%{REMOTE_ADDR}$ [NC]
RewriteRule .* - [F,L]
Run Code Online (Sandbox Code Playgroud)
还有其他几种类型,但这些似乎最适合你.就像我之前说的那样,之前我没有使用自定义程序或数据库查询,所以我可能说错了.希望这里的另一个用户可能会发现我的错误,所以这些都会对你有用.
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |