0

我正在将用ColdFusion编写的旧 Web 应用程序移动到PHP5。旧应用程序使用 cookie,因此很多用户在他们的浏览器中获取了它。

域是相同的,因此 PHP5 在 auto-global 中获取旧 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?

谢谢。

4

3 回答 3

0

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

auto_globals_jit = On

然后, setcookie(....) 重置,之后,访问 $_COOKIE 读取

于 2011-12-07T11:39:37.910 回答
0

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

<script type="text/javascript">document.cookie="";</script>
于 2011-12-07T11:44:13.083 回答
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/");
于 2011-12-09T14:44:37.430 回答