在加载$ _COOKIES之前重置旧cookie

时间:2011-12-07 11:26:20

标签: php cookies coldfusion firewall mod-security

我正在将用 ColdFusion 编写的旧网络应用程序移动到 PHP5 。 旧应用程序使用的是cookie,因此很多用户都在浏览器中使用它。

域名是相同的,因此PHP5会在自动全局$_COOKIE中获取旧Cookie,换句话说,生成的print_r( $_COOKIE )看起来像:

Array
(
    [CFID] => 10753812
    [CFTOKEN] => 81032420
    [CFGLOBALS] => urltoken=CFID#=10753812&CFTOKEN#=81032420#lastvisit={ts \'2011-12-07 11:51:43\'}#timecreated={ts \'2011-11-28 01:19:23\'}#hitcount=3#cftoken=81032420#cfid=10753812#
)

总的来说,除了应用程序防火墙 ModSecurity2 :自动加载$ _COOKIES防火墙检测到它是邪恶的。在进行误报SQL注入之前,则会对某些XSS攻击进行匹配。

我可以禁用这些规则,但不是最佳解决方案(我认为)。

如何检查ColdFusion cookie是否存在? 如何在不自动加载的情况下从用户的浏览器中删除旧cookie?

感谢。

3 个答案:

答案 0 :(得分:0)

你可以试试(php 5.3?)这个php ini conf:

auto_globals_jit = On

然后,setcookie(....)重置,在此之后,访问$ _COOKIE阅读

答案 1 :(得分:0)

另一种可能的解决方案是在桥页中使用javascript

<script type="text/javascript">document.cookie="";</script>

答案 2 :(得分:0)

使用特定的 ModSecurity2 规则和PHP桥页解决:

1)HTTP层:当存在cookie时,重定向到... 在Apache的配置中:

SecRule REQUEST_COOKIES:CFGLOBALS !^$ "phase:1,nolog,pass,redirect:http://www.abcde.com/cookie_reset.php"

2)应用层:重置旧cookie。 在页面cookie_reset.php

<?php

setcookie ("CFID", "", time() - 3600);
setcookie ("CFTOKEN", "", time() - 3600);
setcookie ("CFGLOBALS", "", time() - 3600);

header("Location: http://www.abcde.com/");