2014-01-28 5 views
2

Im пытается создать область администрирования, но не может заставить систему входа работать. У меня есть три части. Страница login.cfm, login_action.cfm и app.cfc.Создание системы входа в систему с использованием Coldfusion

При использовании этого кода и попробуйте войти и войти в него только на одной странице.

Login.cfm

<form name="fLogin" id="fLogin" action="<cfoutput>#FormAction#</cfoutput>" method="post"> 
    <label>Username:</label> 
    <input type="text" name="username" required> 
    <label>Password:</label> 
    <input type="password" name="Password" required> 
    <br> 
    <input type="submit" id="sub" value="Login"> 
</form> 

Login_action.cfm

<cflogin idletimeout="1800"> 

<!--- SETS the action page of the login form to whatever 
     page the user was trying to go to. Since the login 
     will actually be processed in the application.cfm file 
     (or a template included in it), then the FORM action 
     is the page that will be loaded after the login has 
     been completed. --->  

<!--- IF there IS NOT a Query String passed in the URL, 
     only the requested page name is used ---> 

<cfif CGI.QUERY_STRING IS "">  
    <cfset FormAction = #CGI.SCRIPT_NAME#>  
<cfelse>   
    <cfset FormAction = "#CGI.SCRIPT_NAME#?#CGI.QUERY_STRING#">  
</cfif> 

<cfif not (isDefined("cookie.XXXX.email"))> 
    <cfif NOT (IsDefined ("Form.username") AND IsDefined ("Form.Password"))>   
    <cfinclude template="login.cfm"> 
    <cfabort> 
    <cfelse> 
    <cfif IsDefined("Form.username")> 
     <cfset username = #Form.username#> 
    </cfif> 

    <CFQUERY NAME="login">    
     select * from t_admin where username = '#username#'  
    </CFQUERY> 

    <cfif login.RecordCount gt 0> 
     <cfif #Form.password# eq "#login.password#"> 
     <cfloginuser name="#username#" password="#login.password#" roles="admin"> 
     <cfcookie name="XXXX.email" value="#login.email#" expires="never" > 
     <cfset session.userId = #login.id#> 
     <cfelse> 
     <cfset Invalid = "Yes"> 
     <cfinclude template="login.cfm"> 
     <cfabort> 
     </cfif> 
    </cfif> 
    </cfif> 
<cfelse> 
    <CFQUERY NAME="cookielogin">    
    select * from t_admin where email = '#cookie.XXX.email#'  
    </CFQUERY> 

    <cfloginuser name="#cookielogin.email#" password="#cookielogin.password#" roles="admin"> 
    <cfset session.userId = #cookielogin.id#> 
    <cfset session.email = #cookielogin.email#> 
</cfif> 

</cflogin> 

и Application.cfc.

<cffunction name="OnRequestStart"> 
    <cfinclude template="login_action.cfm"> 
    <cfif isDefined ('cookie.XXXX.email')> 
    <cfset session.email = cookie.XXXX.email> 
    </cfif> 
</cffunction> 

Если кто-то может помочь, что будет большое спасибо

+8

Вы храните открытые пароли. Остановитесь и зафиксируйте это, прежде чем делать что-либо еще. –

+0

Пожалуйста, отформатируйте свой код в следующий раз. (Если вы хотите, чтобы другие люди читали ваш код, вы хотите убедиться, что, по крайней мере, это выглядит хорошо.) – Tomalak

+0

@Tomalak Спасибо за это –

ответ

8

Есть довольно много фундаментальных ошибок в этом коде.

  • Не строите URL-адрес с строкой запроса, которая поступает из браузера. Вы не можете доверять что-нибудь, которое исходит от браузера, поэтому вы не должны ничего использовать, не очищая его. Такие вещи, как это просят неприятности:

    <cfset FormAction = "#CGI.SCRIPT_NAME#?#CGI.QUERY_STRING#"> 
    
  • Вообще никогда не писать ничего в HTML вашей страницы, которые пришли от пользователя без правильно дезинфицировать и HTML-кодирования его. Используйте HTMLEditFormat() и URLEncodedFormat() экстенсивно.

  • Не используйте , используя значения, предоставленные пользователем, чтобы построить строку SQL. Существует <cfqueryparam>, используйте его. Это плохо и неправильно:

    select * from t_admin where username = '#username#'  
    
  • В то время как мы на это: Никогда не используйте select * в производстве код.

  • Никогда не храните текстовые пароли в базе данных. Это большая вещь, вы действительно должны это исправить, прежде чем делать что-либо еще. ColdFusion предоставляет ряд алгоритмов хэширования, использует их (и читает о соленых хешах).
  • Форма входа в систему отправляется через HTTPS? (Все в этой заявке должно быть, вероятно, HTTPS, но форма Логина абсолютно должна быть.)
  • Вход печенье должно быть помечено как secure и httponly (see), чтобы предотвратить угон сессий.
  • Войти cookies, срок действия которых истек, никогда не будет хорошей идеей. Зависит.
+0

Спасибо за это, вы знаете, где я могу узнать информацию о том, как это сделать? –

+1

Поисковая система? Вы можете найти основные объяснения тегов/функций в 'cfdocs.org/ ' - то есть http://cfdocs.org/htmleditformat и http://cfdocs.org/cfqueryparam - затем нажмите синий «CF», чтобы получить официальный Docs. Для других вещей, размещение соответствующих терминов в окне поиска в верхнем правом углу, вероятно, даст полезную информацию, в противном случае попробуйте [DuckDuckGo] (http://ddg.gg) или [Google] (http://google.com). –

+0

@SamAllen получить копию ColdFusion Web Application Construction Kit. В томе 3 есть целая секция по защите ваших приложений. –

Смежные вопросы