専門家にアドバイスを求める: PHP 投稿経由で質問を送信する
php 投稿投稿
Xiaoxia がプログラムを作成しました。Ajax テクノロジーを使用してバックグラウンド PHP の実行プロセスを呼び出し、データベースを Mysql に書き込む機能を実現しました。その後、一部のユーザーが URL を通じてパラメータを直接つなぎ合わせ、URL 入力メソッドを通じて php の実行プロセスを手動で呼び出していたことが判明しました。
質問 1: URL を介したバックエンドへの直接手動送信を禁止する良い方法はありますか?
いくつかのヘルプを確認しましたが、一般的な考え方は、送信前に、時間 t を通じてバックグラウンドに送信して、対応する暗号化キー値 k1 を取得します。
正式な送信中に、t と k1 の両方を送信すると、バックグラウンドで再暗号化されます。 tを求めてk2を取得し、k1とk2が同じであればデータベースへの書き込み処理を実行する。
質問 2: この方法では、キー値 k1 を取得する処理が追加されます。k1 を取得しない場合よりも明らかに時間がかかります。それを回避する方法はありますか?
質問 3: 暗号化されたキー値 k1 を取得するプロセスが、他のユーザーによって URL を通じてバックグラウンドで直接手動で呼び出されないようにするにはどうすればよいですか?
アドバイスをお願いします!
よろしくお願いします!
ディスカッションに返信(解決策)
これが私がいつもやることです
特定のコード
それから、これ以上はありません。最後の "?>" を削除するだけです。 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'] がフロントでどのように取得されるのか詳しく教えていただけますか?素晴らしい!
テンプレート エンジンを通じてフロントエンド テンプレートにハッシュ値を支払います

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
