3

クレジットカード番号をデータベースに保存するトラフィックの少ないショップの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 = 0session.use_only_cookies = 1介してのみ処理される(なぜ両方が必要なのかわからない))を使用し、この特定のセッション変数を使用すると、このコードはセッション固定に対して脆弱ですか?セッションIDを再生成することは有益でしょうか(後または前ですか?)sessionこの場合、cc#を設定しましたか?はいと思います。この時点でプロトコルはSSLであるため、session再生成されると、SSLが取得できる限り保護されていると思います。

したがって、私の主な質問は、私のサイトでこれらのガイドラインに従うと、熟練した攻撃者は、セッションを修正/ハイジャックして、ユーザーのcc#を存在する時間(約3〜15秒)取得するのにかなり困難な時間を費やすでしょうか?そうでない場合、可能であれば、どのようにしてその時点に到達できますか?

4

2 に答える 2

2

セッションがハイジャックされた場合でも、スクリプトでユーザーがCC番号を表示できるようにしている場合、またはサイトにセッションのダンプがある場合にのみ、ユーザーはCC番号を取得できます。

また、CC番号をプレーンテキストでデータベースに保存することは違法である可能性があることにも注意してください。データの盗難が心配な場合は、必ずすべての機密データをエンコードまたは暗号化してください。

幸運を!

于 2012-01-27T02:06:53.997 に答える
0

カード番号は絶対に保存しないでください。デフォルトでは、PHPはセッションをマシン上のファイルに保存します。マシンが危険にさらされた場合、誰かがセッションファイルからクレジットカード番号を盗む可能性があります。

あなたがすべきことは、すべての情報を取得して、Authorize.Netなどのクレジットカードプロセッサに直接渡すか、ユーザーがサービスによってホストされているドメインで支払いを行い、認証コードでそれらを返すことを可能にするサービスを使用することですだからあなたは彼らが支払ったことを知っています(PayPalはそのようなサービスを持っています、私は彼らが最高ではないことを知っていますが他にもあります)

情報を取得するには、少なくともある程度のPCIコンプライアンスが必要です。カード情報を保存するには、はるかに高いレベルが必要です。

PCIについてはたくさんのことがあります。これがそのウィキです:http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard

于 2012-01-27T00:31:26.267 に答える