Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security CFD包括最佳实践和潜在的安全问题_Security_Coldfusion_Coldfusion 10 - Fatal编程技术网

Security CFD包括最佳实践和潜在的安全问题

Security CFD包括最佳实践和潜在的安全问题,security,coldfusion,coldfusion-10,Security,Coldfusion,Coldfusion 10,我正在编写一个应用程序,其中包括许多对话框/模式div,允许用户执行各种任务,例如上传图像、发送电子邮件等 我的应用程序具有基于角色的安全性,因此当您登录时,它会检查会话变量以确定您是谁,然后提供相应的功能 目前,我的所有对话框/模态都在需要它们的页面中。这意味着,如果我想在网站的其他地方使用相同的对话框,我必须复制代码并将其放在该页面上。这立刻让我想到我应该: 为每个对话框创建一个.cfm文件,例如imageupload.cfm和emailsend.cfm 使用将这些.cfm文件包括在任何一个

我正在编写一个应用程序,其中包括许多对话框/模式div,允许用户执行各种任务,例如上传图像、发送电子邮件等

我的应用程序具有基于角色的安全性,因此当您登录时,它会检查会话变量以确定您是谁,然后提供相应的功能

目前,我的所有对话框/模态都在需要它们的页面中。这意味着,如果我想在网站的其他地方使用相同的对话框,我必须复制代码并将其放在该页面上。这立刻让我想到我应该:

  • 为每个对话框创建一个.cfm文件,例如
    imageupload.cfm
    emailsend.cfm
  • 使用
    将这些.cfm文件包括在任何一个页面上都要使用它们
  • 这个潜在的解决方案给我带来了挑战,因为包含对话框的页面上有许多if/else语句,可以根据用户的角色(存储在会话变量中)确定向哪个用户显示什么

    因此,我必须:

  • 将if/else逻辑语句复制到对话框页面,因为 例如,
    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会做你想做的,而且很容易学习。我相信