2016-05-26 24 views
0

私は、POSTデータをPHPスクリプトに公開する公開フォームを用意しています。phpスクリプトをcsrfから保護する... PHPセッションなし(クロスサイト)

この形式は、同じドメインに置かれていない、とPHPを使用していないいずれかのような保護は、PHPのセッションを中心に構築することができません。

目的は、のみこのフォームを投稿することですその PHPスクリプト。

How do I provide more security for checking source of the requestは、PHPのセッションを使用してCSRF保護を実装する方法について説明しますが、私はそれなしで鉱山を守るために何ができるか疑問?出来ますか?あなたが素敵である、あなたのために行くことを持っているので、

答えて

1

POSTリクエストは、リクエストをGETするために比較偽物に困難です。スクリプトで$ _REQUESTを使用していないことを確認してください。

あなたはここでセッションを使用することはできませんが、原則は同じです - あなたは、フォームとPHPスクリプトの間の「ハンドシェイク」のいくつかの種類を実装しなきゃ。セッションがオプションでない場合は、いくつかのアプローチがあります。

最も簡単なことは、httpの参照元を確認することです。これは、フォームがhttpで、スクリプトがhttpsであり、オープンリダイレクトの脆弱性を使って克服できる場合は機能しません。

もう1つの方法はcaptchasです。私は知っている、最近ではユーザーフレンドリーではない、またはファッショナブルではありませんが、ハッカーがユーザーの入力なしで場面の裏で彼の悪用作業を行うことができないので、要求偽造をはるかに困難にするでしょう。あなたはreCAPTCHA(googleの "私はロボットではありません"チェックボックス)を調べるべきです:https://www.google.com/recaptcha/intro/index.html

これは難しい状況です。これは、1つのホスト上のフォームと別のホスト上のスクリプトは基本的にCSRF自体であり、許可したい1つのホストに対してのみ有効です。ここでは、ユーザーの操作を必要とせずに完全なセキュリティを実現することは不可能かもしれないので、できるだけハードなハッカーがあなたのスクリプトを混乱させるように、あるいはUX側で苦労してください。個人的に私はreCAPTCHAに行くだろう。

+0

非常に良い答えをありがとうございます。 captchaについて、私は理解していません。それは、非形式/人間の試みからPHP処理スクリプトへの直接アクセスをどのように保護することができるのでしょうか?私にとっては、フォーム側に実装されているのですか? –

+0

自分でスクリプトを実装するか、reCAPTCHAなどの外部サービスを使用するかにかかわらず、スクリプトのキャプチャを検証して、フォームの背後に人間がいるかどうかを確認します。つまり、人間であると思われるスクリプトを除外し、フォームへの意図しない呼び出しを避けることができます。 –

+0

明確にするために、ユーザー自身が別のホストでフォームを使用したいと思っていますが、とにかくそれを行います:)。 Captchasは、CSRFに対する保護を支援します。これは、ハッカーがユーザーに知らせずにフォームを提出するように仕向けることを意味します。 CSRFの定義など:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet –