0

apache的日志中隐藏了一个安全漏洞,比如你输入了一个关于

http://localhost/meeting/import.php?cmd=admin&password=pass&userName=hsh&meetingID=123 

进入浏览器,然后access.log将完成记录,所以这是一个安全问题,因为它记录了安全参数:

cmd=admin&password=pass&userName=hsh&meetingID=123 

现在,我想控制我的日志打印,如果我执行一个不包含安全参数的 url,例如http://localhost/meeting/op.do,access.log 必须记录它,但是如果我输入一个包含安全性的 url参数如:

http://localhost/meeting/import.php?cmd=admin&password=pass&userName=hsh&meetingID=123

那么access.log不应该记录它,我应该去实现什么?

我尝试了一种方法,该方法可以设置有关SetEnvIfCustomLog的日志变量,但它不起作用:

SetEnvIf Request_URI "(https?://.+\\?([^=]+=[^=]+)+)" dontlog 
CustomLog logs/access.log common  env=!dontlog 

因为我的app请求类型是get,所以Request_URI无法获取参数,如果你执行一个URL:

http://localhost/meeting/import.php?cmd=admin&password=pass

Request_URI 是http://localhost/meeting/import.php,所以这个方法不能成功。

您有什么有用的方法或建议吗?如果您解决此问题,我将不胜感激,谢谢。提醒一下,我的开发环境是W7,不是linux,不支持shell。

** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ****

----问题变了!!!----

现在,我不仅要控制我的日志打印,而且如果我执行一个不包含安全参数的 url,它也会将参数替换为 *symbol,例如:

http://localhost/meeting/op.do, 

access.log 必须记录它,但是如果我输入一个包含安全参数的 url,例如

http://localhost/meeting/import.php?cmd=admin&password=pass&userName=hsh&meetingID=123,

那么正则表达式替换必须起作用,它会解决:

http://localhost/meeting/import.php?cmd=****&password=****&userName=****&meetingID=****, 

进入日志,我应该去实现什么?提醒:我的开发环境是W7。谢谢!

4

2 回答 2

2

Request_URI不包括 query_string 所以它永远不会匹配。您需要使用mod_rewrite来设置环境变量。

RewriteEngine On
RewriteCond %{QUERY_STRING} (password=)
RewriteRule ^ - [E=dontlog:1]
CustomLog logs/access.log common env=!dontlog
于 2012-09-14T17:44:09.510 回答
0

不只是更改您的应用程序以使用 POST 请求来处理任何需要密码的更简单的解决方案吗?这就是为什么您不应该对任何您不想记录的内容使用 GET 请求的原因。

于 2012-09-14T17:39:37.667 回答