整合动网论坛8.2版之Cookies详解


动网论坛这个另无数asp开发者头疼的家伙,不要说它整个程序如何,如何难懂,相互关联如何复杂,就单说它的Cookies这一项就让很多人摸不着边际,在动网6.0之前的版本,有个漏洞就出在cookies上,别人可以利用Cookies欺骗对动网进行攻击,在之后的版本动网特别加强了Cookies的安全性,这一漏洞也就不存在了。

     我们都知道要很好的对动网进行整合,就必须能够在全站读得Cookies的值,要读到它首先必须搞懂它的Cookies设置方式,动网在每次用户登录时都会更新数据库dv_setup里字段Forum_CookiesPath的值,这个值的取得的算法在login.asp里有,它是一个相对路径,然后获取此站点路径下的相应的Cookies,如username,userclass,因此,你只有论坛的目录下的代码才能读取客户端论坛的Cookies,如果要在其它的地方读取,怎么办呢?

下面是动网Login.asp 里关于Cookies 的设置算法:

<%

'判断更新cookies目录

Dim cookies_path_s,cookies_path_d,cookies_path

cookies_path_s=split(Request.ServerVariables("PATH_INFO"),"/")

cookies_path_d=ubound(cookies_path_s)

cookies_path="/"

For i=1 to cookies_path_d-1

    If not (cookies_path_s(i)="upload" or cookies_path_s(i)="admin") Then cookies_path=cookies_path&cookies_path_s(i)&"/"

Next

If dvbbs.cookiepath<>cookies_path Then

    cookies_path=replace(cookies_path,"'","")

    Dvbbs.execute("update dv_setup set Forum_Cookiespath='"&cookies_path&"'")

    Dim setupData

    Dvbbs.CacheData(26,0)=cookies_path

    Dvbbs.Name="setup"

    Dvbbs.value=Dvbbs.CacheData

End If

%>


本次修改的文件共有三个 1) inc/Dv_ClsMain.asp 2) login.asp 3) logout.asp3、修改方法

1)定义为通用名称 打开inc/Dv_ClsMain.asp 这一步的主要目的是将论坛的COOKIE名称定义为通用名称

①在本文件的开头定义变量 dim mybbsdir MyBbsDir = "/club/"

②寻找Forum_sn 'Forum_sn为各cookies名称的前缀,应该有两个,它只是将两个连接起来再赋值给了Forum_sn,可去掉第一个,再改为Forum_sn = "andy" '自己喜欢用什么都可



2)更改Cookies目录这一步的主要目的将论坛的cookies目录定义为全局目录,即根目录"/"

①打开inc/Dv_ClsMain.asp 分别寻找 Response.Cookies(Forum_sn).path 和 Response.Cookies(Dvbbs.Forum_sn).path 将右侧的值均替换为"/" ,例: Response.Cookies(Forum_sn).path="/"

② 打开login.asp 寻找 Response.Cookies(Dvbbs.Forum_sn).path=Dvbbs.cookiepath 应该共有三个,其中一个是:Response.Cookies(Dvbbs.Forum_sn).path = Dvbbs.cookiepath(等号两旁有空格) 替换为: Response.Cookies(Dvbbs.Forum_sn).path="/"

③ 打开logout.asp 寻找 Response.Cookies(Dvbbs.Forum_sn).path=Dvbbs.cookiepath 第27行应该只有一个替换为: Response.Cookies(Dvbbs.Forum_sn).path="/" 至此,修改完毕,即可以达到cookies全站通用的目的了



3) 更改用户登陆是返回地址 目的:让从非bbs目录登陆的用户能够返回登陆页方法:

① 打开login.asp 寻找comeurlname,定位到 Dim comeurlname:在它下面的第一个if语句前再加一个if判断 改为 Dim comeurlname If request.servervariables("http_referer")<>"" and InStr(request.servervariables("http_referer"),MyBbsDir)>0 Then (原Dim comeurlname下面的12代码即第一个if语句所包含的代码) Else Response.Redirect request.servervariables("http_referer") End If

②打开logout.asp 寻找Dvbbs.Forum_Info(11) 对控制语句进行if判断 改为 If request.servervariables("http_referer")<>"" and InStr(request.servervariables("http_referer"),MyBbsDir)>0 Then (原script控制的三行代码) Else response.write"" response.write"setTimeout(""window.location='"&request.servervariables("http_referer")&"'"",1000);" response.write"" End If

好了,修改完了到了这里,你的整个网站就都可以使用论坛的cookies了,而且登陆和退出时都会自动返回你所在的页面你可以在其他地方取的COOKIES数据为: Request.Cookies("andy")("username") '用户名,对应[dv_user]表的username字段;此处andy就是我们开始设置的Forum_sn ,Request.Cookies("andy")("password") '用户随机密码,对应[dv_user]表的truepassword字段 Request.Cookies("andy")("userid") '用户id,对应[dv_user]表的userid字段

[本日志由 随然 于 2009-03-28 05:45 PM 编辑]
上一篇: 网上开店低价货源大揭密
下一篇: 我的作品目录列表
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 动网 论坛 整合 COOKIE
相关日志:
评论: 0 | 引用: 0 | 查看次数: 11789
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1 字 | UBB代码 关闭 | [img]标签 关闭