0

そのため、Cookie を使用してユーザーを識別し、ログインしていない人がアクセスできないようにしています。これはページのチェックコードです

        if (!isset($_COOKIE['username']) && !isset($_COOKIE['password']))
        { 
        header("location:clientlogin.php");
        }

ただし、これはチェックの半分にすぎません。これが私の問題です。私のURLはこのようにフォーマットされています

site.com/?Client=$Client&Product=$Product

何かを行う前に、Cookie のユーザー名がリンク内の情報と一致することを確認したいと思います。$Client は姓であり、ユーザー名は電子メール列であるため、最初に DB から情報を取得する必要があると思います。Cookie の比較を試みましたが、失敗しました。

次に、URL の改ざんを防止したいと考えています。現在の設定では、誰でも $Client と $Product を変更して、それらに属さない情報を取得できるからです。ただし、次のようなチェックを挿入するたびに:

    if($Client != $LastName)
    {
    header("location:clientlogin.php");
    }

既に $Client (ページが GET で始まる) がある場所では、リダイレクト ループが作成され、ログインできません。ログインしてそのページにリダイレクトされるたびに、clienlogin.php に戻ります。Cookie のユーザー名 (ちなみに、これは 1 年続きます) を実際のデータと比較できれば、解決できるかもしれません。両方の問題?

私は十分な情報を提供したことを願っています.

ありがとうございました!

4

2 に答える 2

1

@DaveChen: 暗号化されていない Cookie にユーザーのパスワードを保存する、(どのスクリプト言語でも) 遭遇したフレームワークは 1 つも、ログインしたことのある有名な Web サイトも 1 つもありません。これは、ユーザーに対して行うことができる最も危険なことです。Cookie に SSL と httponly オプションが設定されていても (JavaScript XSS 攻撃を軽減するため)、それは非常に悪い考えです。

あなたがやろうとしていることを達成するための最も近い「適切な」方法は、クッキーの内容を暗号化することです。ほとんどすべての正常な Web サイトが使用する最良の方法は、セッション データをクライアント側にまったく保存しないことです。クライアントの Cookie には、ランダムに生成された (力ずくでは困難な) セッション ID しか含まれていません。すべてのデータ自体は、データベース、セッション ファイル、またはキャッシュ サーバーのいずれであっても、サーバーに保存されます。

php の組み込みセッションを使用することをお勧めします。まず、php セッションのリファレンス全体を読んでください。デフォルトでは、php はセッションをサーバー上の一時ファイルに保存します。クライアントはセッション ID のみを取得します。

1 人のユーザーのデータを他のユーザーの目から保護することに関するあなたの質問に対する部分的な回答を提供するには、クエリ文字列 (url) に「クライアント」をまったく入れないでください。代わりに、URL からの「製品」と、セッションから取得した「クライアント」の値をデータベースで検索します。したがって、URLは次のようになりsite.com/?Product=$Product、セッションの「クライアント」値を使用し、両方の値を同時にチェックするデータベースクエリを実行します(製品がログインしているクライアントに属していることを確認するため)- のようなSELECT * FROM products where client_id = ? AND product_id = ?.

于 2013-07-23T04:32:21.183 に答える
1

まず、個人のパスワードを Cookie に保存しないでください。

その情報を手に入れるのはとても簡単です。代わりにセッションを使用してください。ここを参照

于 2013-07-23T03:48:32.493 に答える