我有一个奇怪的问题。我在Lucee构建了一个Web应用程序。您需要登录才能使用Web应用程序。已经发生了至少两次登录会话已经转移给其他用户的情况。澄清发生了什么:
如上所述,自应用程序启动以来至少发生过两次,所以这听起来像是一个事件。安全方面,这是一个大问题,因为用户1是管理员,用户2具有基本访问配置文件。
我的问题:有没有人认识到这个问题,有人可以就如何解决这个问题提出一些建议。
由于
答案 0 :(得分:1)
如果您正在使用会话变量,则可能会将数据分配给CFC中的错误范围,或者在应用程序范围内错误地存储对象,甚至是两者的混搭。
确保您的CFC功能正在使用本地范围:
var x = ""
或local.x = ""
否则,x
将位于CFC的变量范围内,可以通过CFC内的任何函数对其进行操作。这会导致跨会话的数据从一个调用到另一个调用。尝试使用varscoper扫描代码以查找这些问题。
或者,您可以将包含用户数据的对象存储到应用程序范围中或存储在应用程序范围内的另一个对象内。这可以允许用户A在他们同时登录时访问用户B的数据。
您需要对代码库进行此类问题的审核,并通过用户会话逻辑来验证数据的存储和访问位置和方式。
答案 1 :(得分:0)
与建议的评论之一可能是用户在同一网络上和/或他们使用了代理,例如squid,这将缓存所有传入的内容。要查看是否有可能查看服务器发送的标头,看看是否有任何与缓存相关的标头(Cache-Control,Expires,Last-Modified,ETag)。
如果你想阻止缓存你可以在application.cfc onRequestStart中设置第一个示例标题,或者至少阻止缓存用户内容,你可以对第二个例子进行一些修改。
<cfscript>
//EX 1
header name="cache-control" value="no-cache"; //no caching by anything
//EX 2
if(loggedIn){
header name="cache-control" value="private, max-age=<time_in_seconds>"; //allow browser to cache content
}else{
header name="cache-control" value="public, max-age=<time_in_seconds>"; //allow anything to cache content
}
</cfscript>