3

コールドフュージョン アプリケーションを継承しました。コードは非常に古く (Allaire の時代を考えてください)、私はゆっくりとアップグレードしてきました。最近、侵入テストに耐えましたが、多くの領域で失敗しました。現時点で私が注目しているのは、ログイン機能、特に Cookie の保存方法と使用方法です。最近、Windows で CF 2018 にアップグレードしました。

現在、このサイトは RDS 経由でのみアクセスできますが、近い将来、一般の Web 経由でアクセスできるようになる予定です。

現在、コードは難読化のヒープを使用して、次のように「rememberme」Cookie onLogin を設定します。これは Ben Nadel の例から借用したものだと思います: https://www.bennadel.com/blog/1213-creating-a-remember-me-login-system-in-coldfusion.htm

<cfset strRememberMe = (
        CreateUUID() & ":" &
        SESSION.User.ID & ":" &
        SESSION.User.Name & ":" &           
        SESSION.User.Billing & ":" &            
        SESSION.User.Admin & ":" &          
        SESSION.User.Reversals & ":" &          
        CreateUUID()
        ) />

<cfset strRememberMe = Encrypt(
        strRememberMe,
        APPLICATION.EncryptionKey,
        "cfmx_compat",
        "hex"
        ) />

<cfcookie
        name="RememberMe"
        value="#strRememberMe#"
        expires="never"
        httponly="true" <!--- Set in CFAdmin so not reqd here --->
        />

この Cookie にはいくつかのユーザー権限が含まれており、サイトの特定の部分にアクセスしたり、特定の機能を実行したりできるユーザーにフラグを立てます。

不要なデータを Cookie から完全に除外し、おそらくユーザー ID のみを保持したいと考えています。おそらく application.cfc onRequest() メソッドでチェックを行って、Cookie をチェックし、データベースにクエリを実行してから、ユーザー権限に関連するセッション変数を設定することができます。現在、application.cfc onSessionStart() は、Cookie からユーザー権限を解析して、セッション スコープの変数を作成します。Cookie に未加工の UserID しかない場合の問題は、UserID が簡単に推測される可能性があることです。そのため、何らかのタイプの難読化または暗号化が必要になる可能性があります。

私の読書から、cfmx_compat が提供する暗号化が弱いことがわかりました。

私は、あらゆる種類のサードパーティまたはMITMの悪用/攻撃からCookieを保護し、アプリケーションで使用するための最もクリーンで効果的な方法を求めています. 私はこれについてインターネット上のほぼすべてを読みましたが、人々はさまざまなことを行ったり提案したりしています. 私の脳は今、アイデアでいっぱいです。私は派手になりたいのではなく、ただ効果的です。

現在、このサイトには SSL または TLS がありませんが、間もなく実装される予定であり、セキュリティ面で問題を解決するのに役立ちます.

4

1 に答える 1