2017-02-13 14 views
0

私はColdfusionとAngularJSでアプリケーションを開発しています。私はAngularJS 1とCF11を使用しています。Coldfusion - サーバー上でajax "GET"クエリの実行を防ぐ方法

ユーザーは、アプリケーションにログインする必要があります。ユーザーIDはCFセッションに保存されます。私はそのように工場を実装myAngularJSサービスで

app.factory('ContactService', function($http){ 

    var factory={}; 

    factory.getContact=function(id){ 
     return $http.post('http://myapp/contacts.cfc?method=getContacts&subsString=' + id); 
    }; 

    return factory;  
}) 

をここに私のコンポーネントcontacts.cfcは

<cfcomponent displayname="Contacts" hint="Webservice for contacts app"> 

    <cffunction name="getContacts" access="remote" returnformat="JSON" output="no"> 
     <cfargument name="subsString" required="no" type="String" /> 

     <cfset ret = arrayNew(1) /> 
     <cftry> 

      <cfinclude template="cfc/person/qry/qry_Search.cfm" /> 
      <cfloop from="1" to="#qryFastSearch.recordcount#" index="i"> 

       <cfset searchVO = structNew() /> 
       <cfset searchVO['ID']= #qryFastSearch.ID[i]# />   
       <cfset searchVO['PERSON']= #qryFastSearch.personName[i]# /> 
       <cfset searchVO['COMPANY']= #qryFastSearch.COMPANY[i]# /> 

       <cfset ret[i] = searchVO /> 
      </cfloop> 

      <cfcatch type="any"> 
       <cfset returnVO = structNew() /> 
       <cfset returnVO.ERROR = true /> 
       <cfset returnVO.MESSAGE = cfcatch.Message /> 
       <cfset ret[1] = returnVO /> 
      </cfcatch> 
     </cftry> 

     <cfreturn SerializeJSON(ret)>  
    </cffunction> 

</cfcomponent> 

システムは、コントローラを実行すると、工場が実行され、結果が表示されます。ブラウザーのコンソールでurlが実行されていることがわかります。例えば

http://myapp/contacts.cfc?method=getContacts&subsString=test

私は彼女がアプリケーションに接続されていない場合は、クエリ(URLのこの種のおかげで)実行する人を避けるようにしたいと思います。

ブラウザでURLを非表示にすることは可能ですか?

これを行うにはどのような方法が最適ですか?

ご協力いただきありがとうございます。

+0

人物がログインしていることを示す情報を受け取るには、関数に引数を追加します。次に、受け取った値が有効であることを確認します。 –

答えて

0

  1. はユーザーがログインしていることを確認し
  2. CGI.REQUEST_METHODの値を確認してください。 POSTでない場合は、要求を拒否します。
  3. ロールが&のロールである場合は、そのURLにアクセスする必要があることを確認します。
  4. できるだけ早く検索パラメータを検証してください。

$http.post()を使用しているので、クエリ文字列にsubStringを渡すべきではありません。ブラウザーのキャッシュとサーバーログ内のエントリが存在しない可能性があるエントリを避けるために、投稿されたデータの一部である必要があります。

+0

返事をありがとう。ちょうど質問:それはPOSTまたはGETメソッドが良いですか? – coeurdange57

+0

これはすべて依存しています。要求に応じてデータを変更する場合は、POSTまたはPUTが適しています。データを要求しているだけの場合は、GETは問題ありません。 –

0

「ユーザーIDはCFセッションに保存されています」と記述します。関数の引数として渡します。

<cffunction name="getContacts" access="remote" returnformat="JSON" output="no"> 
<cfargument name="subsString" required="no" type="String" /> 
<cfargument name="userId" required="yes" type="String" /> 

次に確認してください。ダンさんのコメントに追加するには

<cfif StructKeyExists(session, "userId") 
and session.userId is arguments.userId> 
rest of function 
<cfelse> 
whatever you want goes here. 
関連する問題