Security CFD包括最佳实践和潜在的安全问题
我正在编写一个应用程序,其中包括许多对话框/模式div,允许用户执行各种任务,例如上传图像、发送电子邮件等 我的应用程序具有基于角色的安全性,因此当您登录时,它会检查会话变量以确定您是谁,然后提供相应的功能 目前,我的所有对话框/模态都在需要它们的页面中。这意味着,如果我想在网站的其他地方使用相同的对话框,我必须复制代码并将其放在该页面上。这立刻让我想到我应该:Security CFD包括最佳实践和潜在的安全问题,security,coldfusion,coldfusion-10,Security,Coldfusion,Coldfusion 10,我正在编写一个应用程序,其中包括许多对话框/模式div,允许用户执行各种任务,例如上传图像、发送电子邮件等 我的应用程序具有基于角色的安全性,因此当您登录时,它会检查会话变量以确定您是谁,然后提供相应的功能 目前,我的所有对话框/模态都在需要它们的页面中。这意味着,如果我想在网站的其他地方使用相同的对话框,我必须复制代码并将其放在该页面上。这立刻让我想到我应该: 为每个对话框创建一个.cfm文件,例如imageupload.cfm和emailsend.cfm 使用将这些.cfm文件包括在任何一个
imageupload.cfm
和emailsend.cfm
将这些.cfm文件包括在任何一个页面上都要使用它们imageupload.cfm
提供的内容将根据您的角色而有所不同user security.cfc
文件的保护,该文件检查用户是否登录。我是否也必须在每个对话框.cfm页面中进行此调用?如果我这样做,那么将在同一页面中对相同的user security.cfc
文件进行两次调用,因为对话框页面包含在主页中。但是,如果我不在dialog box.cfm中调用user security.cfc
,那么有人会直接进入这些页面并开始造成混乱吗很抱歉,这不是一个纯粹的编程问题和更多的理论最佳实践,但我不知道如何在保持可扩展性的同时解决它。我正在IIS 7.5上使用ColdFusion 10,您可以按如下方式提高代码的可重用性 使用user-security.cfc文件的实例创建应用程序范围变量。在Application.cfc文件的onApplicationStart()方法中执行此操作。大概是这样的:
application.SecurityChecker = CreateObject("component", "user-security");
另外,在onApplicationStart()方法中,创建不需要安全检查的页面列表
application.SecurityNotNeededPages="page1.cfm,page2.cfm,etc";
在onRequestStart()方法中使用这些变量
这将解决人们在未登录时直接浏览包含页面的问题。它还将使您的应用程序运行得更快,因为您只需创建user-security.cfc的一个实例一次,并且每个页面请求上的每个用户都可以使用它
编辑从这里开始
Adam Cameron在评论中说,“另外,onRequestStart()已经接收到被请求文件的名称作为参数;我认为不需要使用CGI作用域来获取它。”。这对我来说是个新闻,所以我想我应该去看看
我运行了一个具有此功能的页面
<cffunction name="onRequestStart" access="public" returntype="boolean">
<cfdump var="#arguments#">
<cfreturn true>
</cffunction>
这给了我一个键1,值显示了我实际运行的页面的路径。所以,按照错误的顺序做事,我读到了。根据这些指导原则,我在上面的代码中添加了以下内容:
<cfargument name="targetPage" required="yes">
毫不奇怪,转储提供了一个具有相同值的TARGETPAGE键。然后我把论点的名字改为“fred”。垃圾堆给了我一把弗雷德的钥匙,钥匙的价值和他一样
底线是,无论您使用发送到页面的参数还是cgi作用域,都必须使用ListLast来获取页面名称。您可以按如下方式提高代码的可重用性 使用user-security.cfc文件的实例创建应用程序范围变量。在Application.cfc文件的onApplicationStart()方法中执行此操作。大概是这样的:
application.SecurityChecker = CreateObject("component", "user-security");
另外,在onApplicationStart()方法中,创建不需要安全检查的页面列表
application.SecurityNotNeededPages="page1.cfm,page2.cfm,etc";
在onRequestStart()方法中使用这些变量
这将解决人们在未登录时直接浏览包含页面的问题。它还将使您的应用程序运行得更快,因为您只需创建user-security.cfc的一个实例一次,并且每个页面请求上的每个用户都可以使用它
编辑从这里开始
Adam Cameron在评论中说,“另外,onRequestStart()已经接收到被请求文件的名称作为参数;我认为不需要使用CGI作用域来获取它。”。这对我来说是个新闻,所以我想我应该去看看
我运行了一个具有此功能的页面
<cffunction name="onRequestStart" access="public" returntype="boolean">
<cfdump var="#arguments#">
<cfreturn true>
</cffunction>
这给了我一个键1,值显示了我实际运行的页面的路径。所以,按照错误的顺序做事,我读到了。根据这些指导原则,我在上面的代码中添加了以下内容:
<cfargument name="targetPage" required="yes">
毫不奇怪,转储提供了一个具有相同值的TARGETPAGE键。然后我把论点的名字改为“fred”。垃圾堆给了我一把弗雷德的钥匙,钥匙的价值和他一样
底线是,无论您使用发送到页面的参数还是cgi作用域,都必须使用ListLast来获取页面名称。创建一个index.cfm页面,该页面基本上由一个大的switch语句组成。您的URL是action.subaction ie index.cfm?action=email.send。在index.cfm中解析它。然后,根据需要检查每种情况的安全规则和cfinclude。但是你真的需要学习一个框架。FW/1会做你想做的,而且很容易学习。我相信Coldbox也有一个极简版 创建一个index.cfm页面,该页面基本上由一个大的switch语句组成。您的URL是action.subaction ie index.cfm?action=email.send。在index.cfm中解析它。然后,根据需要检查每种情况的安全规则和cfinclude。但是你真的需要学习一个框架。FW/1会做你想做的,而且很容易学习。我相信