目次
2。XSSを防ぐための出力をエスケープします
3.データベース入力を安全に処理します
4.文字列を正規化および変換します
5.非推奨または不安定な機能を避けてください
6。階層化されたアプローチを使用します(詳細な防御)
例:完全な入力処理フロー
ホームページ バックエンド開発 PHPチュートリアル 安全な入力処理のためのPHP文字列の消毒と変換

安全な入力処理のためのPHP文字列の消毒と変換

Jul 28, 2025 am 04:45 AM
PHP Modify Strings

filter_sanitize_emailやfilter_sanitize_urlなどの適切なフィルターを使用してfilter_var()を使用して常に入力をサニタイズし、その後filter_validate_emailで検証します。 2。HTMLコンテキストのhtmlspecialchars()を使用して出力をエスケープ、jsssを防ぐためにjson_hex_tagを使用してjson_hex_tagを使用します。 3.データベースクエリにPDOまたはMySqliを使用して準備したステートメントを使用して、手動逃げずにユーザーの入力を安全に処理します。 4.空白をトリミングし、MB_CONVERT_ENCODING()を使用してUTF-8に変換し、一貫性のために低下し、過剰なスペースを減らすことにより、文字列を正規化します。 5. mysql_real_escape_string()、strip_tags()、addslashes()などの非推奨機能を避けます。 6.リスクを効果的に軽減するために、クライアント側の検証(UXのみ)、サーバー側の消毒、出力の脱出、準備されたステートメント、コンテンツセキュリティポリシーを含む階層化されたセキュリティアプローチを適用します。安全なPHP入力処理には、脆弱性を防ぎ、データの整合性を確保するために、一貫した多層プラクティスが必要です。

安全な入力処理のためのPHP文字列の消毒と変換

PHPでユーザー入力を処理する場合、SQLインジェクション、XSS(クロスサイトスクリプト)、データの破損などのセキュリティの脆弱性を防ぐために、文字列の消毒と変換が重要です。文字列を適切に消毒および変換すると、入力が安全で、一貫性があり、意図した使用に適していることが保証されます。データベースに保存されているか、Webページに表示されるか、別のシステムに渡されます。

安全な入力処理のためのPHP文字列の消毒と変換

安全な入力処理のためにPHPの文字列を効果的に消毒および変換する方法は次のとおりです。


filter_var()を使用したフィルター入力

常にユーザーの入力を信頼されていないように扱ってください。 PHPの組み込みfilter_var()関数を使用して、データを早期に消毒および検証します。

安全な入力処理のためのPHP文字列の消毒と変換
 $ email = filter_var($ _ post ['email']、filter_sanitize_email);
$ url = filter_var($ _ post ['url']、filter_sanitize_url);
$ string = filter_var($ _ post ['input']、filter_sanitize_string、filter_flag_strip_low | filter_flag_strip_high);

キーフィルター:

  • FILTER_SANITIZE_STRING - タグを削除して特別なcharをエンコードします(PHP 8.1で非推奨、 htmlspecialchars() 、および手動剥離を使用します)。
  • FILTER_SANITIZE_EMAIL - 違法文字を削除します。
  • FILTER_SANITIZE_URL - URLセーフ文字のみを許可します。
  • FILTER_VALIDATE_EMAILFILTER_VALIDATE_IPなど - 検証のためだけではなく。

:サニタイゼーション≠検証。サニタイズ後は常に検証します。

安全な入力処理のためのPHP文字列の消毒と変換
 if(filter_var($ email、filter_validate_email)){
//安全に使用できます
}

2。XSSを防ぐための出力をエスケープします

入力を消毒するだけでは不十分です。特にHTML、JavaScript、または属性で出力するときは、常にデータをエスケープしてください。

 echo htmlspecialchars($ userInput、ent_quotes、 'utf-8');
  • ENT_QUOTESを使用して、単一の引用と二重引用符を変換します。
  • エンコード関連のエクスプロイトを防ぐために、エンコード( UTF-8 )を指定します。
  • JavaScriptコンテキストの場合、 json_encode()を使用します。
     <スクリプト>
      var userdata = <?= json_encode($ data、json_hex_tag | json_hex_apos | json_hex_quot)?>;
    </script>

3.データベース入力を安全に処理します

ユーザー入力をSQLクエリに連結しないでください。代わりに準備されたステートメントを使用してください。

PDOで:

 $ stmt = $ pdo-> prepare( "ユーザー(名前、電子メール)値(?、?)");
$ stmt-> execute([$ name、$ email]);

mysqliで:

 $ stmt = $ mysqli-> prepare( "ユーザー(名前、電子メール)値(?、?)");
$ stmt-> bind_param( "ss"、$ name、$ email);
$ stmt-> execute();

これにより、SQLの文字列を手動でエスケープする必要がなくなり、アプリをより安全でクリーンにします。


4.文字列を正規化および変換します

一貫したフォーマットは、エラーとスプーフィングの試みを減らすのに役立ちます。

  • Whitespaceをトリム:

     $ clean = trim($ input);
  • エンコードをUTF-8に変換:

     if(!mb_check_encoding($ input、 &#39;utf-8&#39;)){
      $ input = mb_convert_encoding($ input、 &#39;utf-8&#39;、 &#39;auto&#39;);
    }
  • 一貫性のための小文字のメール:

     $ email = strtolower(trim($ email));
  • 余分な白人を削除します:

     $ clean = preg_replace( &#39; /\ s /&#39;、 &#39;&#39;、$ clean);

5.非推奨または不安定な機能を避けてください

  • mysql_real_escape_string()を使用しないでください - それは非推奨であり、すべての攻撃から保護しません。
  • strip_tags()のみを避けます - 適切に検証または脱出しません。
  • addslashes()に依存しないでください - それはコンテキストを認識しておらず、バイパスすることができます。

その代わり:

  • 出力にはhtmlspecialchars()を使用します。
  • 必要に応じて、最新の消毒ライブラリまたは手動フィルタリングを使用してください。

6。階層化されたアプローチを使用します(詳細な防御)

セキュリティは、単一のステップに依存してはなりません。適用する:

  • クライアント側の検証- UXの場合(ただし、決して信用しないでください)。
  • サーバー側の消毒と検証- 必須。
  • 出力が逃げます- 常にコンテキストを認識します。
  • 準備されたステートメント- データベース用。
  • CSP(コンテンツセキュリティポリシー) - XSSの影響を緩和します。

例:完全な入力処理フロー

関数SanitizeInput($ input){
    //エンコードをトリミングして処理します
    $ input = trim($ input);
    $ input = mb_convert_encoding($ input、 &#39;utf-8&#39;、 &#39;auto&#39;);

    //危険なコントロール文字を剥がします
    $ input = preg_replace( &#39;/[\ x00- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x7f]/&#39;、 &#39;&#39;、$ input);

    //余分な空白を削除します
    $ input = preg_replace( &#39; /\ s /&#39;、 &#39;&#39;、$ input);

    $入力を返します。
}

// 使用法
$ name = sanitizeinput($ _ post [&#39;name&#39;]);
$ email = filter_var($ _ post [&#39;email&#39;]、filter_sanitize_email);

if($ email && filter_var($ email、filter_validate_email)){
    //準備されたステートメントを進めます
}

セキュアな入力処理は1つの機能ではなく、すべてのレイヤーでの一貫したプラクティスに関するものです。早期に消毒し、厳密に検証し、出力で脱出し、安全なデータベースインターフェイスを使用します。これが、Resilient PHPアプリケーションを構築する方法です。

基本的に、ユーザーを信頼しないでください。これまで。

以上が安全な入力処理のためのPHP文字列の消毒と変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

プロレベルの弦のパディング、トリミング、およびケース変換戦略 プロレベルの弦のパディング、トリミング、およびケース変換戦略 Jul 26, 2025 am 06:04 AM

sudynamicpaddingwithpadstart()orpadend()basedoncontext、rsive over-padding、chooseaprofitepaddingcharacterslike'0'fornumericids、andlemulti-byteunicaracterscaterscarefullyusingtoolslikeintl.segmer.2.aplimmingentiontly:usetrimws(

PHPの文字列分割、結合、およびトークン機能のガイド PHPの文字列分割、結合、およびトークン機能のガイド Jul 28, 2025 am 04:41 AM

固定分離器に適した単純な文字列セグメンテーションには、exploit()を使用します。 2。定期的なセグメンテーションにはpreg_split()を使用して、複雑なパターンをサポートします。 3。Prode()を使用して、配列要素を文字列に連結します。 4. strtok()を使用して文字列を連続して解析しますが、内部状態に注意してください。 5。sscanf()を使用してフォーマットされたデータを抽出し、preg_match_all()を抽出して、すべての一致するパターンを抽出します。入力形式とパフォーマンス要件に従って適切な関数を選択します。 Exploit()とInprode()を単純なシナリオで使用し、複雑なモードでpreg_split()またはpreg_match_all()を使用し、strtoを使用して段階的に解析します

低レベルの文字列変更のためのビットワイズ操作を分類します 低レベルの文字列変更のためのビットワイズ操作を分類します Jul 26, 2025 am 09:49 AM

bitwiseperationsが使用されているforefficientstringmanipulationinasciibydirectlymodiviying characterbits.1.totogglecase、usexorwith32: ' a '^32 =' a '、および' a '^32 =' a '、fastcaseconversion withoutbranching.2.useandwith32tocheckifacharacterislowercase、orandwith〜32t

UTF-8の処理:マルチバイトストリングの変更に深く潜ります UTF-8の処理:マルチバイトストリングの変更に深く潜ります Jul 27, 2025 am 04:23 AM

tosafelymanipulateutf-8strings、youmustusemultibyte-awarefunctionsbecausestandardstringoperations assumeunebytepercharacter、whi chcorruptsmultibytecharactersinutf-8; 1.alwaysusunicode-safefunctionslikemb_substr()andmb_strlen()inphpwith'utf-8'encodingspe

チェーン可能な文字列操作:PHPの流fluentインターフェイスアプローチ チェーン可能な文字列操作:PHPの流fluentインターフェイスアプローチ Jul 27, 2025 am 04:30 AM

チェーン文字列の操作を使用すると、コードの読みやすさ、保守性、開発エクスペリエンスを改善できます。 2.インスタンスを返すチェーンメソッドを構築することにより、滑らかなインターフェイスが実現されます。 3。LaravelのStringableクラスは、強力で広く使用されているチェーンストリング処理機能を提供しました。実際のプロジェクトでこのタイプのパターンを使用して、コード式を強化し、冗長関数のネストを減らし、最終的に文字列処理をより直感的で効率的にすることをお勧めします。

安全な入力処理のためのPHP文字列の消毒と変換 安全な入力処理のためのPHP文字列の消毒と変換 Jul 28, 2025 am 04:45 AM

AlwaysSanitizeInputusingfilter_var()with with suppratefilterslikefilter_sanitize_emailorfilter_sanitize_url、andvalidateafterward withfilter_validate_email; 2.escapeoutputwithhtmlspecialchars()forhtmlcontextsandjson_encode()withjson_hex_tagforjavascripttop

メモリオーバーヘッドなしで大きな文字列を効率的に変更します メモリオーバーヘッドなしで大きな文字列を効率的に変更します Jul 28, 2025 am 01:38 AM

authighmemoryusage、usemutablestringbuilderSorbuffers、crostingstringsinchunksviastreaming、nsemetisteStestringcopies、andchooseeftientdatastructureslikeropes;

最新のPHPにおける戦略的な文字列解析とデータ抽出 最新のPHPにおける戦略的な文字列解析とデータ抽出 Jul 27, 2025 am 03:27 AM

formbuilt-built-built-instringfunctionslikestr_starts_withandexplodeforsimple、fast、andsafeparsingは、predictableformats.2.usesscanf()forstructuredStringStringTemplutessuchaslogEntededededededededededededevet

See all articles