クレジットカード番号をデータベースに保存するトラフィックの少ないショップのWebサイトを維持しています。これは正しくない(または私が信じる合法でさえある)ので、番号の保存方法を変更しています。
サイトの構成方法では、クレジットカード情報ページがそれ自体に投稿し、データを検証し、データをデータベースに保存してから、ユーザーをcc検証ページにリダイレクトします。ここでccが検証され、注文が行われます。その後、注文完了ページに再度リダイレクトされます。とにかく、cc情報ページから検証ページにcc番号を取得するために、セッションを使用することを考えていましたが、脆弱性が心配で、それらを調べようとしています(私はこの参照とこれを読んでいます) 。cc番号をセッションに保存し、次のページで取得して使用すると、unset()数秒で消えます(これらのページはSSLを使用していることに注意してください)。何かのようなもの:
cc情報ページ:
session_start();
$_SESSION['card_number'] = $_POST['cardnumber']; //please tell me if there are vulnerabilities here setting directly from $_POST
...
header(sprintf("Location: %s", $insertGoTo));
cc検証ページ:
session_start();
//retrieve $_SESSION['card_number']
unset($_SESSION['card_number']);
カード番号のみがセッションに保存され、残りのcc情報はデータベースに保存されます。誰かがcc#だけで多くのことができるとは思いませんが、それでも可能な限り保護する必要があります。
と(セッション識別子はURLではなくCookiesession.use_trans_sid = 0をsession.use_only_cookies = 1介してのみ処理される(なぜ両方が必要なのかわからない))を使用し、この特定のセッション変数を使用すると、このコードはセッション固定に対して脆弱ですか?セッションIDを再生成することは有益でしょうか(後または前ですか?)sessionこの場合、cc#を設定しましたか?はいと思います。この時点でプロトコルはSSLであるため、session再生成されると、SSLが取得できる限り保護されていると思います。
したがって、私の主な質問は、私のサイトでこれらのガイドラインに従うと、熟練した攻撃者は、セッションを修正/ハイジャックして、ユーザーのcc#を存在する時間(約3〜15秒)取得するのにかなり困難な時間を費やすでしょうか?そうでない場合、可能であれば、どのようにしてその時点に到達できますか?