我正在将用 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?
感谢。
答案 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/");