ホームページ >バックエンド開発 >PHPチュートリアル >専門家にアドバイスを求める: PHP 投稿経由で質問を送信する
php 投稿投稿
Xiaoxia がプログラムを作成しました。Ajax テクノロジーを使用してバックグラウンド PHP の実行プロセスを呼び出し、データベースを Mysql に書き込む機能を実現しました。 これが私がいつもやることです
特定のコード
それから、これ以上はありません。最後の "?>" を削除するだけです。 direct 送信されたページは、構文エラーのため実行されません
これが私が通常行うことです
特定のコード
それから、これ以上はありません。最後の "?>" を削除するだけです。 direct 送信されたページは文法エラーのため実行されません
-------
この解決策は少し「フォークレシピ」です。 。 。 ,
ご返信誠にありがとうございます!
正直に言うと、B/S アーキテクチャでは、サーバーが受信したデータが必要なブラウザーから送信されることを避けるのは困難です。結局のところ、サーバーはクライアントが要求するページを提供して開始するだけです。リクエストを受信した後に実行されます。セッション認証を使用したログインさえもシミュレートできるため、受信したデータが戻るページによって生成されている必要があることを保証するのは困難です、少なくとも私はその方法を思いつきませんでした(笑)。
フォームに非表示を追加し、非表示の値を検証することで判断することをお勧めします (元の投稿者が言及した方法と同様) が、これらの方法でもシミュレーションは可能であり、スキルの低い人のみを防ぐことができます。
結局のところ、インターフェイスはルールに準拠して呼び出されるように書かれているので、できるだけ安全に記述するようにしてください。インターフェース..
書き方については?>xuzuning エディターは、これがより標準化された適切な書き方であると言っていますが、PHP は最後の行の後のすべての改行とスペースを自動的に削除します。元の投稿者の質問には効果的です
悪意のある意図を防ぐためにセッションを使用します データの挿入、具体的な方法: http://www.ibihuo.com/show-60.html
バックエンドはログインを必要としませんか?
anglegz さんへ: あなたは私の疑問に高いレベルから答えてくれましたが、私のアプリケーションはすべて B/S であり、現時点ではそれらを B/C に変更することは不可能です。
anyilaoliu さんへ: より安全なインターフェースを書くことが解決策であり、ユーザーURL による送信の本質は、ajax チェックステップをスキップしてバックエンドに直接送信することです。
ログインする必要があります。 現在、ログインしているユーザーです (ログインしていないと送信できません)。ログイン)、同じマシン上で別の同一のブラウザを開き、アドレス バーに不正なデータを手動で送信します。
y244360439 へ: 「次に、この値をセッションに保存します。$_SESSEION['hash'] = $hash;
」というリンクで、セッションを書き込むためのストアド プロシージャがユーザーのみによって呼び出されないようにするにはどうすればよいですか?私の理解では、セッションを作成するプロセスはパラメーターを使用して送信することもできますが、これはアドレスバーで手動で送信することもできます。
皆さんありがとうございます。他に何か提案はありますか?
js を使用してくださいフロントにて PHPで再度制限や判定をしなければjs検証を回避したと言う時点で悲惨なことになります
---------------------- ------ ---------------
バックグラウンドで再度判定を行う場合は、さらに多くのパラメータを判定・制限用の変数として渡す必要があります。この投稿のプロセスでは、URL を手動で入力することで入力変数を改ざんする別の方法を紹介します。おい、まだ抜け穴があるじゃないか!
フロントエンドでjsで行った制限や判定をPHPで再度判定しなければjsの検証をバイパスしたと言う時点で悲惨なことになります
-------------- - ------------------------
バックグラウンドで再度判定を行う場合、判定用の変数としてさらに多くのパラメータを渡す必要があり、制限。この投稿のプロセスでは、URL を手動で入力することで入力変数を改ざんする別の方法を紹介します。おい、まだ抜け道があるんじゃないのか!?
手動で入力した変数が要件を満たしていれば、心配する必要はありませんね
フロントエンドでの制限と判断は必要ですPHP で判断されるようにする そうでないと、この JS 検証を回避する方法を言うと悲劇になるでしょう
---------------------------- ---- ----
バックグラウンドで再度判定を行う場合は、判定・制限用の変数としてさらに多くのパラメータを渡す必要があります。この投稿のプロセスでは、URL を手動で入力することで入力変数を改ざんする別の方法を紹介します。ねぇ、まだ抜け穴があるんじゃないですか
手動で入力した変数が要件を満たしていれば、心配する必要はありません
---------------- -- ------------------
手動で入力した変数はすべて要件を満たしているため、問題ありません。問題は、ユーザーが「違法な」データを送信することです。
親愛なる皆さん、抜け穴のない解決策はありますか?
私の現在の判断によれば、ユーザーはすでに「隠し」変数の値を取得できます。
もちろん、隠されたデータは dom ノード内にあります。それが違法であるかどうかは、どのように判断すればよいでしょうか。
もちろん dom ノードに手動で隠すこともできます
--------------------
その後のデータの手動分析により、「違法」という結論に達しました。 。
おっしゃるとおり、既存のjs検査と「提出されたデータ値」の判定をもとに、再度PHP上で該当する検証が行われるとのことです。この解決策は、フロントエンドのパラメータ変数をデータベースに直接送信するのではなく、バックグラウンドで既存のデータに基づいてフロントエンドの判断に使用するパラメータ変数を再導出できるという前提条件があります。使用するために。
この方法は試してみる価値があります!この方法では、セッションに暗号化キーの値を記録する必要はありません。
データベースに直接入力しないでください。データベースに入力する前に、インジェクション攻撃を引き起こす可能性のあるコードが存在するかどうかを確認してください。
より安全なインターフェイスを書くことが解決策です。 ユーザーマニュアルのURL。送信するには、ajax チェックのステップをスキップして、
に ahui_lcm を直接送信します。ログインする必要があります。現在、ログインしているユーザーです (ログインせずに送信することはできません)。同じマシンにアクセスし、アドレス バーに不正なデータを手動で送信します。
y244360439 へ: 「次に、この値をセッションに保存します。$_SESSEION['hash'] = $hash;
皆さん、他に何か提案はありますか? セッションはバックグラウンドでランダムに生成され、ユーザーによって干渉されません。これが原則です。現在これを行う良い方法はありません。バックグラウンドでそれを制限するにはどうすればよいですか? アドレス バー上のこのような一般的な csrf パラメータはすべて有効です。 $_POST ?プログラムで $_POST を使用して、フォームからデータを受け取ります。アドレスバーを使用してパラメータを直接入力した場合、$_POST は受信されますか?
シミュレーションはもう一つの要件であり、完全な防止は不可能です。
難易度を上げても大丈夫です。と要件
特定のコード
それから、これ以上はありません。最後の "?>" を削除するだけです。そうすれば、直接送信されたページは文法上の理由でブロックされます。エラー 実行できません
わかりません
to y244360439: セッションはバックグラウンドでランダムに生成され、ユーザーによって干渉されることはありません。Discuz の操作の多くは、この方法を使用しています。これが原則です
----------- - ---------------
同様のリファレンスを探したかったのですが、
SWFUpload のソース コードしか見つかりませんでした。その処理は次のとおりです。
1) フロントの JS 内の URL -end 呼び出しページ パラメーターの割り当て: "PHPSESSID" : ""
2) バックグラウンド実行スクリプトで sessionid を確認して割り当てます:
// セッション Cookie の回避策のコード
if ( isset($_POST ["PHPSESSID"])) {
session_id($_POST["PHPSESSID"])
} else if (isset($_GET["PHPSESSID"])) {
session_id($_GET["PHPSESSID" ]);
}
JS で「session storage, $_SESSEION['hash'] = $hash」を実装する方法がわかりませんでした。その方法について教えていただけますか?動作しない場合は、Discuz のソース コードをダウンロードして考えてください。
ahui_lcm へ: 送信されたコードを確認すると、変数は $_REQUEST[‘xxx’] を通じて取得されます。後で $_POST を変更すると、コードが大幅に改善されるはずです。私は今勉強して販売している中途半端な人間ですが、ベストがありません:)
さらに詳しい説明については、理解できない場合は、ウェブサイトで質問してください。 ://www.ibihuo.com/show-60.html
独自の暗号化および復号化レターを作成できます。例:
ajax submit to a URL http://localhost/a.php?key=REWTR54365EY&val=? ?
キーの値は php を使用します。暗号化関数は暗号化されたコンテンツです (例: カスタム暗号化関数 (「送信される結果」))。それを a.php に送信した後、復号化関数を使用します。キーの値を取得して (送信する結果と結合して)、この送信の要件を満たしているかどうかを確認します
実際、暗号化キーを使用して、承認ページでキーを復号化して確認します。
$_SERVER["HTTP_REFERER"] を使用して、それが自分のページからのものであるかどうかを確認します。 $_SERVER["HTTP_REFERER"] の偽造は違法です。技術的に壊れないものはありません。
さらに詳しい説明については、もう一度読んでください。理解できない場合は、ウェブサイト http://www.ibihuo.com/show-60.html で質問してください。 ------ -----------------------------
教えていただいた暗号化と復号化の方法を試してみます。 Ajax 経由で暗号化された変数データを送信します: "hash="+hash" ですが、クライアントがバックグラウンド PHP によって生成された $hash 値を取得する良い方法がありません (フロント デスクと呼び出されたバックグラウンドが分かれています)。 2 つの異なるファイルに分割されます)。現状では、バックグラウンドPHPで生成される$hash値を取得するメソッドもajaxのみで呼び出されているため、この取得処理が送信効率を低下させたり、機密漏洩の可能性があると個人的に感じています。
$_SESSEION['hash'] がフロントでどのように取得されるのか詳しく教えていただけますか?素晴らしい!
2. Cookie に識別語 (セッション ID を含む) を挿入します。ただし、Cookie は簡単に取得できるため、安全性は保証できません
3. js を使用して送信します (識別語を動的に追加することを含む)。通常、ツールは js を実行しないため、状況は多少改善されます。ただし、手動追跡後の通信介入を排除することはできません
2. Cookie に識別語 (セッション ID を含む) を挿入します。ただし、Cookie は簡単に取得できるため、安全性は保証できません
3. js を使用して送信します (識別語を動的に追加することを含む)。通常、ツールは js を実行しないため、状況は多少改善されます。ただし、手動追跡後のコミュニケーション介入の可能性は排除できません
-------------------------------------- -
1. URL パラメータを無効にするための送信を受け入れるには、$_POST のみを使用します
----> 先ほど ahui_lcm で述べたように、これは修正されており、不正な手動アドレス入力に対処するのに確かに効果的です。
2. Cookie に識別ワード (セッション ID を含む) を挿入します。ただし、Cookie は簡単に取得できるため、セキュリティを確保できません。
----> セキュリティは保証されませんが、侵害される可能性は高くなります。
3. js を使用して送信します (識別単語を動的に追加することを含む)。
----> 確認コードの識別方法を追加することを検討しましたが、ユーザーの操作が 1 つ増えてユーザー エクスペリエンスに影響を与えると感じました。
ブレーンストーミング、ご返信ありがとうございます!
1. URL パラメータを無効にするための送信を受け入れる場合にのみ、$_POST を使用します。
2. Cookie に識別語 (セッション ID を含む) を挿入します。ただし、Cookie は簡単に取得できるため、安全性は保証できません
3. js を使用して送信します (識別語を動的に追加することを含む)。通常、ツールは js を実行しないため、状況は多少改善されます。しかし、手動追跡後のコミュニケーション介入を排除することはできません
私は PHP の初心者です。項目 2 と 3 が何を意味するのか、モデレーターに詳しく説明してもらえますか?
さらに詳しい説明については、もう一度読んでください。理解できない場合は、ウェブサイト http://www.ibihuo.com/show-60.html で質問してください。 ----- ----------------------------------
暗号化と復号化方法を試してみますあなたが言及したように、Ajax data: "hash="+hash" を介して暗号化された変数を送信しますが、クライアントがバックグラウンド PHP (私のフロントデスクと背景と呼ばれるファイルは 2 つの異なるファイルに分割されています)。現状では、バックグラウンドPHPで生成される$hash値を取得するメソッドもajaxのみで呼び出されているため、この取得処理が送信効率を低下させたり、機密漏洩の可能性があると個人的に感じています。
$_SESSEION['hash'] がフロントでどのように取得されるのか詳しく教えていただけますか?素晴らしい!
テンプレート エンジンを通じてフロントエンド テンプレートにハッシュ値を支払います