php セキュリティ フィルタリング_PHP チュートリアル
phpセキュリティフィルタリング
/*ansicコード-URLコードテーブル: http://www.w3school.com.cn/tags/html_ref_urlencode.html
-------------- ------------ -------------------------------------- ------------ -------------------------------------- ------------
1. ユーザー入力の検証とフィルタリング
最も一般的な英数字入力であっても、セキュリティ上の問題を引き起こしやすい文字をいくつか紹介します:
!$ ^ & * ( ) ~ [ ] { } ' " ; < > ? - `
データベース内で特別な意味を持つ文字:
'" ; いくつかの非印刷文字もあります:
文字 x00 または ASCII 0、NULL または FALSE
文字 x10 と x13、または ASCII 10 と 13、n r
文字 x1a または ASCII 26 は、ファイルの終わりを示します
間違ったパラメータ タイプを入力すると、予期せぬ問題が発生する可能性もありますプログラム内のエラー。
パラメータ値を入力しすぎると、オーバーフローやその他のエラーが発生する可能性があります。
2. ファイルのパスと名前のフィルタリング
ファイル名にバイナリ データを含めることはできません。そうしないと問題が発生する可能性があります。
一部のシステムでは Unicode マルチバイトでエンコードされたファイル名を使用できますが、それを避け、代わりに ASCII 文字を使用するようにしてください。
Unix システムではファイル名設定でほぼすべての記号を使用できますが、- と _ を使用し、他の文字の使用は避けてください。
同時に、ファイル名の長さを制限する必要があります。
3. SQL インジェクションを防ぐ
ユーザー入力が数値の場合は、次の方法を使用できます:
is_int() 関数 (または is_integer() または is_long() 関数)
gettype() 関数を使用する
intval() 関数を使用する
settype() 関数を使用する
strlen() 関数を使用してユーザー入力文字列の長さを確認する
日付または時刻が有効かどうかを確認するには、strtotime() 関数を使用できます
4. XSS 攻撃を防止する
xss 攻撃の一般的な方法は、PHP に組み込まれている js スクリプトを実行するために HTML 要素を挿入することです。いくつかの防御機能 (htmlentities や htmlspecialchars など)
5. ユーザーが送信した URL をフィルターする
ユーザーが URL を入力して画像やリンクを呼び出すことが許可されている場合は、http 以外の URL を渡さないようにする必要があります。 javascript:、vbscript:、data: などのプロトコル。
PHPの組み込み関数parse_url()関数を利用してURLを分割して判定することができます。
6. リモート実行の防止 -- 次の表に、シェルに関連するいくつかの文字を示します:
リモート実行では通常、eval() 関数などの PHP コード実行を使用するか、exec()、passthru ()、proc_open などのコマンド実行を呼び出します。 ()、shell_exec()、system()、または Popen()。
PHP コードの挿入: PHP は、開発者に PHP スクリプトを呼び出すためのさまざまな方法を提供します。ユーザーが制御可能なデータのフィルタリングに注意を払う必要があります。
7. シェルコマンドの実行
PHP には、exec() 関数や ` (バックティック) など、システムコマンドを直接実行できるいくつかの関数が用意されています。
PHP のセーフ モードはある程度の保護を提供しますが、セーフ モードをバイパスする方法もいくつかあります:
1. サーバーがサポートする環境に Perl スクリプト、または Python や Ruby などをアップロードして、スクリプトを実行します。他の言語では PHP セーフ モードをバイパスします。
2. システムのバッファ オーバーフローの脆弱性を利用して、セーフ モードをバイパスします。
シェルに関連するいくつかの文字:
名前文字 ASCII 16 進 URL エンコード HTML エンコード
改行 10 22 " または "
ドル記号 $ 36 x24 %24 $
コネクタ & 38 x26 %26 & #38 または amp
一重引用符 ' 39 x27 %27 '
左括弧 ( 40 x28 %28 (
右括弧) 41 x29 %29 )
アスタリスク* 42 x2a %2a *
ハイフン - 45 x2d %2d -
セミコロン; 59 x3b %3b ;
左山括弧< 60 x3c %3c <
直角括弧 62
疑問符? 63 x3f %3f ?
左括弧 [91 x5b %5b [
バックスラッシュ 92 x5c %5c \
右角括弧] 93 x5d %5d ]
キャレット ^ 94 x5e %5e ^
バッククォート ` 96 x60 %60 `
左中括弧 { 123 x7b %7b {
パイプ 124 x7c %7c |
右中括弧} 125 x7d %7d }
チルダ ~ 126 x7e %7e ~
---------------------------- ---------- -------------------------------------- ---------- -----------------------
セキュリティフィルター機能コード*/
/**
* 安全なフィルタリング入力 [jb]
*/
function check_str($string , $isurl = false)
{
$string= preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/','', $string); //制御文字を削除
$string= str_replace(array("
empty($isurl)&& $string =preg_replace("/&(?!(#[0-9]+|[a-z]+);)/si",'&',$string);//HTML 内xx; を使用して、(スペース)、? Unicode 文字などの一部の文字をエンコードできます。A(?!B) は、A の後に B が続かないことを意味するため、作成者は同様の HTML エンコード文字を保持したいと考えています。問題の文字
を削除します $string= str_replace(array("%3C",'<'),'<',$string); //ascii の '<' は '<' に変換されます。
$ string= str_replace(array("%3E",'>'),'>',$string);
$string= str_replace(array('"',"'","t", ' ') ,array('"',''','',' '),$string);
returntrim($string);
}
/**
* セキュリティフィルタリングクラス - JavaScript、CSS、iframe、オブジェクトなどの安全でないパラメータをフィルタリングします。 高いフィルタリングレベル
* @param string $value フィルタリングする必要がある値
* @return string
*/
function fliter_script( $value) {
$value=preg_replace("/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit )/i ","&111n\2",$value);
$value= preg_replace("/(.*?)/si","",$value);
$value= preg_replace(" /(.*?)/si","",$value);
$value= preg_replace ("//iesU", '', $value);
return$value ;
}
/**
* セキュリティフィルタリングクラス - HTMLタグのフィルタリング
* @param string $value フィルタリングする値
* @return string
*/
function filter_html($value) {
if(function_exists('htmlspecialchars')) return htmlspecialchars($value);
returnstr_replace(array(" &", '"', "'", "<",">"), array("&", """, "'","<", ">"), $value) ;
}
/**
* セキュリティ フィルタリング クラス - SQL インジェクションを防ぐために受信データに下線を付けます
* @param string $value フィルタリングする値
* @return string
*/
function filter_sql($value) {
$sql= array("select", 'insert', "update", "delete","' ", " /*","../", "./","union", "into", "load_file","outfile");
$sql_re=array("","","" 、"" 、""、""、""、""、""、""、""、"");
returnstr_replace($sql, $sql_re, $value);
}
/**
* セキュリティ フィルタリング クラス - 一般的なデータ フィルタリング
* @param string $value フィルタリングする必要がある変数
* @return string|array
*/
function filter_escape($value) {
if(is_array($value)) {
foreach($value as $k => $v) {
$value[$ k]= self::fliter_str($v);
}
}else {
$value= self::fliter_str($value);
}
return$value;
}
/**
* セキュリティフィルタリングクラス - 特殊な有害な文字をフィルタリングするための文字列フィルタリング
* @param string $value フィルタリングされる値
* @return string
*/
function filter_str($value) {
$badstr= array("

ホット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)

ホットトピック









ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

OnLeaks は、X (旧 Twitter) のフォロワーから 4,000 ドル以上を集めようとして失敗した数日後、Android Headlines と提携して Galaxy S25 Ultra のファーストルックを提供しました。コンテキストとして、h の下に埋め込まれたレンダリング イメージ

TCLは、2つの新しいスマートフォンの発表に加えて、NXTPAPER 14と呼ばれる新しいAndroidタブレットも発表しました。その巨大な画面サイズはセールスポイントの1つです。 NXTPAPER 14 は、TCL の代表的なブランドであるマット LCD パネルのバージョン 3.0 を搭載しています。

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Vivo Y300 Pro は完全に公開されたばかりで、大容量バッテリーを備えた最もスリムなミッドレンジ Android スマートフォンの 1 つです。正確に言うと、このスマートフォンの厚さはわずか 7.69 mm ですが、6,500 mAh のバッテリーを搭載しています。これは最近発売されたものと同じ容量です

サムスンは、ファンエディション(FE)スマートフォンシリーズをいつアップデートするかについて、まだ何のヒントも提供していない。現時点では、Galaxy S23 FE は 2023 年 10 月初めに発表された同社の最新版のままです。

Redmi Note 14 Pro Plusは、昨年のRedmi Note 13 Pro Plus(Amazonで現在375ドル)の直接の後継者として正式に発表されました。予想通り、Redmi Note 14 Pro Plusは、Redmi Note 14およびRedmi Note 14 Proと並んでRedmi Note 14シリーズをリードします。李

Motorola は今年数え切れないほどのデバイスをリリースしましたが、そのうち折りたたみ式デバイスは 2 つだけです。ちなみに、世界の大部分ではこのペアが Razr 50 および Razr 50 Ultra として受け入れられていますが、Motorola は北米では Razr 2024 および Razr 2 として提供しています。
