マイクロ・シグナルは█████サロゲートサロゲート少年生まれパケット███████IVF代理少年から選ばセックス代理█誕生セックスの管パケットの3つの世代から選ば7771███ドナーエッグIVFのIVF★2605★█138█します██ドナーエッグIVFの代理出産██
いくつかの時間前投稿やトピックの南京大学上記のネットワーク攻撃と防御プラットフォームを行うために、彼は過去記事を書いた後、要約する必要があります。質問の種類は、ウェブいるそうであるように、すべてのトピックは、書き込みにネイティブPHPの文法問題であるその多くは非常に多くの質問や、SQLインジェクションなどの伝統的にノー訪問、XSSの脆弱性の種類を、PHPを使用しています。現在のPHPは、世界最高の言語がさを考えると、PHPの問題自体は、Webセキュリティの一の側面としてカウントすることができます。PHPでの特徴は、弱く型付けされた、および組み込み関数を緩く渡される引数を処理するためのものです。この記事では主に、私はPHPの関数は問題上記の攻撃と守備のプラットフォームに遭遇していた記録、弱く型付けされたPHPの問題をもたらします。
弱いタイプPHP入門
PHPでは、どのような操作を行うことができます。
$ PARAM = 1;
$ PARAM = 配列();
$のPARAM = "stringg"。
弱く型付けされた言語は、変数のデータ型を限定するものではなく、いつでも変数に変数の他のタイプに割り当てることができますが、変数は、データの他のタイプに変換することができます。
型変換
型変換は避けられない問題です。例えば、GETやPOST必要なパラメータをint型に、または2つの変数が一致しない場合、PHPの変数は自動的に変換されます。しかし、PHPは、予期しない問題がたくさんあるだろう時に型変換時に、その結果、弱い型付けされた言語です。
比較演算子
型変換
比較ではで==の$ bを$
$のA = NULL; $ B = flase。//真
の$ A = ''; $ bの= NULL; //真
このような比較が等しい多くのそのような例があります。
比較演算子は次のような変換の種類の問題があります。
0 == '0' // 真の
0 == 'ABCDEFG' // 本当0 === 'ABCDEFG' // 偽1 == '1abcdef' // 真
変数の異なるタイプの場合は、変数変換を比較するときに、変換後の問題がある可能性があり、問題となります。
ハッシュ比較
問題がある場合は、この方法では上記のハッシュ作りに加えて、それが比較されます。次のように:
"0e132456789" == "0e7124511451155" //真
"0e123456abc" == "0e1dddada" //偽"0e1abc" == "0" //真
比較動作時には、0Eの\ dの+などの文字列遭遇した場合、この文字列は、科学的表記法として解析されます。したがって、上記の実施例2における値の数は0、従ってに等しいです。そうでない場合は0Eの\ dの+このモデルは、同じではありません。攻撃と防御プラットフォームの被写体MD5の衝突がテストする必要があります。
六角変換
とき16進数の文字列の比較演算よりも多くの問題もあります。例としては、次のとおりです:
"0x1e240" == "123456" //真
"0x1e240" == 123456 //真の"0x1e240" == "1e240" //偽
前記0xで始まる文字列は、PHP、この文字列を解析する場合を比較小数になり、0×1240が解決になる123456小数で、比較の文字列int型とタイプが123,456に等しいです。攻撃と守備のプラットフォーム言うこと悲しいの名前からこの機能が検討されています。
型変換
int型主な一般的な変換は、文字列に変換され、文字列はintに変換されます。
int型のターン文字列:
VAR = $ 5;。
モード1:$項目=(文字列)の$ VAR、
モード2:$アイテム= strval($の VAR)。
文字列転送INT:INTVAL()関数。
この機能では、2つの例を見ることができます。
var_dump(INTVAL('2')) // 2
のvar_dump(INTVAL('3abcd')) // 3 のvar_dump(INTVAL('ABCD')) // 0
変換が知っている内容INTVAL()の変換は、文字列の先頭から数字以外の文字を検出しました。変換できない文字列が表示された場合でも、INTVAL()はエラーが、0を返しません。
攻撃と防御のプラットフォームでこの機能のINTVAL()MYSQLのテストするためにそこに疑問ヘッド。
一方、プログラマは次のようなプログラミングは、このコードを使用しないでください。
もし(INTVAL($ A)> 1000){
するmysql_query("ニュースから選択*どこのid ="。$ A)
}
この時点での値は1002組合かもしれ$ ... ..
組み込み関数のパラメータルース
内蔵緩い、それは関数が関数を呼び出すときに受け入れることができない関数に渡されるtypeパラメータの関数であると述べました。問題を説明するための実用的な例を介してビット発音するのは難しい、または直接説明し、以下では、これらの機能のいくつかを紹介します。
MD5()
$配列1 [] = 配列(
"FOO" => "バー"、
"バー" => "FOO" ); $配列2 = 配列("foo"という、"バー"、"こんにちは"、"世界"); var_dump(MD5($配列1)==のvar_dump($配列2)); //真
説明MD5のPHPマニュアル()関数はstring md5 ( string $str [, bool $raw_output = false ] )
、MD5必要は()文字列パラメータ・タイプです。あなたは文句はありません()配列、MD5を渡すときには、知識を正確に等しくなり、アレイのいずれか2つのMD5値につながる配列のMD5値を計算しません。このMD5の特性()攻撃と防御にプラットフォームが再びバイパステストする必要も。
strcmp()
strcmp()関数は、公式のPHPマニュアルに記載されているがされているint strcmp ( string $str1 , string $str2 )
(STRCMPするために必要な)文字列型は、2つのパラメータを渡します。STR2のSTR1、-1未満であれば、同じ戻り0そうでなければ1。本質列比較のstrcmp関数は、ASCIIに2つの変数を変換することであり、次いで減算が、戻り値は、計算結果に基づいて決定されます。
入ってくるパラメータがstrcmpのを与える場合は()の図はありますか?
アレイ= $の[ 1、2、3];
のvar_dump(のstrcmp(配列$、'123')); // NULL、NULLを意味において等価である偽。
攻撃と防御のプラットフォームでこの機能をstrcmpのチェックは合格テストしています。
スイッチ()
スイッチが判定された場合には、ケースの種類の数は、int型に変換されたパラメータを切り替えたとき。次のように:
$ I = "2abc"。
スイッチ($ I){
ケース0: ケース1:ケース2:エコー"iが3未満が、負ではありません"。ブレーク; ケース3:エコー「私は3です」。}
今回はプログラムが出力されi is less than 3 but not negative
スイッチ()関数は、$ I型変換、変換結果が2になりますので、。
in_array()
()関数をin_array説明PHPマニュアルにすることであるbool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
厳密なパラメータが提供されない場合、in_arrayが$干し草の山の$針場合は比較的緩い決定するために使用されるであろう。strince値真、in_array()は比較するときneedlsタイプを干し草および種類は同じです。
$配列= [0,1,2、3 '']。
var_dump(in_array('ABC'、$配列)); // 真のvar_dump(in_array('1BC'、$配列)); // 真
「ABC」が0に変換されるよう上記の場合は、trueを返していることがわかる、「1BCは」1に変換されます。
array_search()とin_array()は、同じ問題です。