2011-06-22 8 views
3

私が取り組んでいるウェブサイトへのアクセスを拒否/許可するための受け入れフォーム(Cookieベース)を作成しようとしています。私はセキュリティ専門家ではないので、フォームの提出をより安全にする方法と、ユーザーが要求した元のページを格納して、受け入れ後に適切なページにリダイレクトできるようにするためのヒントが必要です。ここでクッキーを使ってアクセスを制限する

は、私が働いている基本的なスクリプトです:

<?php 
if(isset($_POST['accept'])) { 
    setcookie ('accept', '1'); 
    header('Location: http://www.the_page_that_was_requested'); 
    exit(); 
} elseif(isset($_POST['decline'])) { 
    setcookie('accept', '0'); 
    exit(); 
} 
?> 

とフォーム:

<form action='' method ='post'> 
<ul> 
    <li> <input type= 'radio' name = 'accept' value = 'accept' /> I accept </li> 
    <li> <input type= 'radio' name = 'decline' value = 'decline' /> I decline </li> 
    <li> <input type = 'submit' value = 'Submit' name = 'submit' /> </li> 
</ul> 

私は私の最初のポスト/ Wは十分明らかにされていない可能性があります:

私がこれを使用したいサイトはWPでホストされているwebcomicです。漫画には「成熟した」コンテンツ(暴力、言語、そして私はそのようなコンテンツを見ているということに読者が「同意する」ための仕組みとしてそのクッキーを使用したがっていました)。はい、私は$ _SESSIONこれを行うには、このケースでは、誰かがそのようなコンテンツを閲覧する意思を「偽造」したいと思うなら、私はクッキーにアクセスできるかどうかを気にする必要はありません。

セキュリティコンセプトについては、私のフォームは安全であることを確認し、利用する簡単なのいくつかの並べ替えまで、私のサイトを開いていない。

+1

ではなく、彼らは変更することができ、クライアントのデータを与え、あなたはデータを保存するためにセッションを使用する必要があります。 – zzzzBov

答えて

3

機密情報は、セキュリティ/許可フラグを含め、クッキーに保存されているべきではありません。

代わりにクッキーを、取ります恋人kをsessionsに設定します。これは、クライアント側でデータを保存しない(したがって、手を操作する手の届かないところにあります)。これは完全には安全ではありませんが、それは全く異なる議論です。

1

代わりにsessionsを使用してください。セッション情報は、ローカルクライアントではなくWebサーバーに格納されます。

<?php 
sessions_start(); 
if(isset($_POST['accept'])) { 
    $_SESSION['accept'] = TRUE; 
} 

は限りリファラとして、HTTP_REFERERは(フォームに機密情報を収集している場合は、やるべきこと何かである)SSLを介して保持されません。フォームに

  • ページへのリンク:あなたはSSL経由でなら

    、あなたはこのような何かを行うことができ
    <a href="myform.php?r=<?=urlencode("http://your.url")?>">My form</a>

  • フォームに値を非表示入力が追加されますr
    <input type="hidden" name="r" value="<?=$_GET['r']?>" />

あなたはSSL(推奨されません)の上に、あなたはこのような何かを行うことができていない場合:
<input type="hidden" name="r" value="<?=urlencode($_SERVER['HTTP_REFERER'])?>" />

次のいずれかの

  • フォームがHTTP_REFERERの値を非表示入力が追加されます道、あなたのPOSTスクリプトがrのPOST'ed値がリダイレクトすることを使用します。
    header("Location: ".urldecode($_POST['r']));

    あなたは、セッションVARを確認することができますドメイン内の他のページ上の他の場所でiable:

    <?php 
    session_start(); 
    if($_SESSION['accept'] == TRUE) { 
        //they have access 
    } 
    ?> 
    
関連する問題