我正在尝试使用正则表达式验证会话cookie值,我已经做了一些测试,但没有任何成功......有人可以编写并解释我如何匹配非ASCII字符,空格(\ s),逗号和分号(基本上是会话值的所有禁用字符)?显然,如果找到其中一个字符,则整行都无效 此时我的功能是:
session_name("RazorphynSupport");
if(isset($_COOKIE['RazorphynSupport']) && !is_string($_COOKIE['RazorphynSupport']) || !preg_match('/^[a-z0-9]{26,40}$/',$_COOKIE['RazorphynSupport'])){
setcookie(session_name(),'invalid',time()-3600);
//return error
exit();
}
session_start();
//Logout
if($_POST[$_SESSION['token']['act']]=='logout' && isset($_SESSION['status'])){
//Logout
}
//Session Check
if(isset($_SESSION['time']) && time()-$_SESSION['time']<=1800)
$_SESSION['time']=time();
else if(isset($_SESSION['id']) && !isset($_SESSION['time']) || isset($_SESSION['time']) && time()-$_SESSION['time']>1800){
//Destroy session; return error
exit();
}
else if(isset($_SESSION['ip']) && $_SESSION['ip']!=retrive_ip()){
//Destroy session; return error
exit();
}
else if(!isset($_POST[$_SESSION['token']['act']]) && !isset($_POST['act']) && $_POST['act']!='faq_rating' || $_POST['token']!=$_SESSION['token']['faq']){
//Destroy session; return error
exit();
}
在session_start()
之前,但显然是错的。
我的问题是如果会话中包含任何非法字符,session_start函数会返回错误,所以为了防止它我想检查“完整性” “饼干的
的修改
表格firebug cookie标签:
Cookie Name -> RazorphynSupport
Value -> ETpSx-T6VFuIYS3fejyaq0
我需要验证ETpSx-T6VFuIYS3fejyaq0
(这是一个随机生成的字符串)
答案 0 :(得分:0)
不应列出您拒绝的内容,而应列出您允许的内容。
您对会话Cookie的期望是什么? (我将假设你的意思是会话cookie的值,这是一个会话ID)它是十六进制字符串吗?多久? 32个字节? 256?还有别的吗?假设您的cookie是一个32字节的六进制字符串。然后以下正则表达式会抓住它们:
/^[a-f0-9]{32}$/
任何与正则表达式不匹配的内容都是无效的。
然而,还有一个更重要的步骤:您应该检查您是否确实有一个尚未过期的ID会话。
答案 1 :(得分:0)
我认为你可以使用这种模式:
if ( preg_match('/^[^:; ]+$/i', 'ETpSx-T6VFuIYS3fejyaq0') ) {
// valid
}
此模式允许使用数字,大写和小写字母a-z
以及连字符-
。