質問
CMSにはindex.phpがあり、クライアントはユーザー名とパスワードを入力する必要があります。それらが正しければ、彼はCMSがあるadmin.phpにムーブします。
しかし、ハッカーはCMS/admin.phpに入ることができるので、私のセキュリティはひどいものになりました。
私は使用できることを知っています $_SESSION
変数。
index.php
- 私は$ _Session ['success']に何らかの価値を与えることができます:
$_SESSION['success'] = TRUE
, 、およびadmin.phpで確認してください
admin.php
if($_SESSION['success'] == TRUE)
{
my script here...
}
else header("Location: index.php");
しかし、私はセッションなしでこの効果を豊かにしたいです。アイデアを教えていただけませんか。どうすればできますか?
ありがとう
解決
Webアプリケーションのセキュリティは本当に深くなります。まず、セッション、または同等のセッションの実装を使用する必要があります。
ユーザーがログインすると、CookieおよびデータベースにセッションIDとそのユーザー名を保存する必要があります。データベースでは、ユーザーエージェントなどの情報を保存する必要があります。そうすれば、セッションがハイジャックされるかどうかを確認できます。 IPアドレスを保存する人もいます。 IPアドレスが頻繁に更新される可能性があるため、ユーザーがモバイルデバイスからアプリケーションを使用している場合、これは機能しません。
ユーザーが管理ページをロードするたびに、有効でそのページを使用する許可があるセッションとユーザーCookieがあることを確認します。次に、リクエストが、そのユーザーについて保存した情報を使用して開始したのと同じコンピューターから来たことを確認します。
管理アクションにつながる可能性のあるすべてのフォームまたはリンクを管理ページに配置するには、一意の識別子に隠されたフィールドまたは値を追加します。管理アクションにつながる可能性のあるページ上のアイテムごとに1つの識別子。これらの識別子を生成するときは、それらを識別しているアクションとともにデータベースに保存します。これはNONCEと呼ばれ、各管理者要求(レコードの更新やユーザーの削除、銀行口座からの資金の転送など)で送信されます。リクエストがサービスされている場合、サーバーはデータベースに保存されているものと一致していることをサーバーが確認し、それを取り除く必要があります。一致しない場合、クロスサイトリクエストの偽造攻撃によってリクエストが行われた可能性があります。
これらは、認証されたユーザーとやり取りするときに留意すべきことのほんの一部であり、もちろんXSSなどに注意すべきことがたくさんあります。
セキュリティは非常に困難であり、Webアプリケーションは防弾セキュリティ戦略を保証することはないかもしれませんが、パスワードや個人情報を保護するためにユーザーに義務付けられています。見る owasp (多くの)詳細情報。
他のヒント
いいえ、セッションなしではやりたくありません。それを行う他の方法であるCookieとリファラーは、スクリーンドアをロックするのと同じくらい安全です。
あなたが投稿したコードは間違っており、非センスです。 (そうあるべきです == true
, 、そしてなぜあなたは彼にあなたのスクリプトを見ることを許可しているのですか エラー, 、成功するのではなく?)
もっと重要なことに、セッションを使用したくないのはなぜですか?何らかの形でユーザーを認証する必要があります。これにより、ページを変更するたびにユーザーにログインを強制する必要がないように、何らかの状態を保存する必要があります。
2つのオプションがあります。
- すべてのリクエストで認証する(HTTP認証を使用してください。ブラウザはバックグラウンドで目に見えて行うことができます)
- 1回認証し、その後、ユーザーコンピューターにある種のキーを保存し、サーバーに参照を維持します
最初の作品ですが、安全性が低く、使いやすいです。 2つ目はセッションのやることです。自分でそれを再実装しようとすると、いくつかのセキュリティホールが表示される可能性があります。セッションを使用したくない実際の理由はありますか?
独自のセキュリティシステムを実装できるようにするには、リクエストでユーザーを追跡できるようにする必要があります。つまり、ユーザー状態を持つことができます。セッションはPHPでこれを行う方法です。組み込みのセッションを使用するか、自分でカスタムワンを実装できます。これらの2つのオプションの後半は、より困難であり、あなたの状況では有益ではない可能性があります。
PHPでのセッションについて覚えておくべき重要なことは、あなたが常にしなければならないということです リクエストごとに開始します. 。どこかにグローバルに含まれるファイル、おそらく何らかの構成ファイルを含める必要があります。私はあなたがあなたを置くことを提案します session_start();
そのファイルの上部近くで、リクエストごとに適切に実行されることを確認します。覚えて、 ヘッダーが送信される前にセッションを開始する必要があります, 、 言い換えると、 出力が送信される前.
PHPを使用してサイトの一部へのアクセスを確保することの1つの抽選は、リクエストがPHPファイルにある場合にのみ機能することです。たとえば、PHPゲートウェイ/フィルターを使用して提供している場合を除き、保護したい画像、ドキュメント、またはその他のメディアがある場合、それらのファイルは認証なしでアクセスできます。
とはいえ、 調べることをお勧めします 基本または消化認証 Apacheによって提供されました。 お客様のニーズのために、適切なセキュリティ以上のものを提供し、実装が非常に簡単である可能性があります。コーディングは必要ありません。さらに、ほとんどのWebホストには、このタイプの認証を管理する管理者ツールがあり、通常は「パスワードで保護されたフォルダー」、「ロックフォルダー」などと呼ばれます。あなたは終わった。