ホームページ >バックエンド開発 >PHPチュートリアル >PHP における一般的な SQL 攻撃正規表現のまとめ、SQL 正規表現_PHP チュートリアル

PHP における一般的な SQL 攻撃正規表現のまとめ、SQL 正規表現_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:14:57916ブラウズ

PHPにおける一般的なSQL攻撃正規表現、SQL正規表現のまとめ

この記事の例では、PHP での一般的な SQL 攻撃の正規表現について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

MYSQL 5 以降では、information_schema ライブラリにすべてのライブラリ名、指示、およびフィールド名の情報が格納されることはすでにご存知です。したがって、攻撃方法は次のとおりです。

1. 最初のテーブル名の最初の文字が a ~ z の文字であるかどうかを確認します。ここで、blind_sqli は想定される既知のライブラリ名です。
注: 正規表現の ^[a-z] は、文字列の開始文字が a-z の範囲内にあることを意味します

コードをコピー コードは次のとおりです:
index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-z]' LIMIT 0 ,1) /*

2. 最初の文字が a-n の文字であるかどうかを判断します

コードをコピー コードは次のとおりです:
index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-n]' LIMIT 0 ,1) /*

3. キャラクターがnであることを確認します

コードをコピー コードは次のとおりです:
index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^n' LIMIT 0,1 ) /*

4. 式は以下のように置き換えられます

コードをコピーします コードは次のとおりです: '^n[a-z]' -> '^ne[a-z]' -> '^ニュース [a-z]' -> このとき、テーブル名が news であることを示すために正規表現は '^news$' となりますが、直接 table_name = 'news' と判断する必要はありません。
5. 次に、他のテーブルを推測します。次のテーブルに対してブラインド注入を行うには、制限 1,1 -> 制限 2,1 を変更するだけです。

例:

コードをコピーします

コードは次のとおりです:$Exec_Commond = "( s|S)*(exec(s|+)+(s|x)pw+)(s|S)*"; $Simple_XSS = "( s|S)*((%3C)| $Eval_XSS = "( s|S)*((%65)|e)(s)*((%76)|v)(s)*((%61)|a)(s)*((%6C )|l)(s|S)*";
$Image_XSS = "( s|S)*((%3C)|)(s|S)*" ;
$Script_XSS = "( s|S)*((%73)|s)(s)*((%63)|c)(s)*((%72)|r)(s)*((%69 )|i)(s)*((%70)|p)(s)*((%74)|t)(s|S)*";
$SQL_Injection = "( s|S)*((%27)|(')|(%3D)|(=)|(/)|(%2F)|(")|((%22)|(- |%2D){2})|(%23)|(%3B)|(;))+(s|S)*";


SQL攻撃コード:

コードをコピーします

コードは次のとおりです:
関数customError($errno, $errstr, $errfile, $errline)
{
    echo "エラー番号: [$errno],$errfile の $errline 行目のエラー
";
    死ぬ();
}
set_error_handler("カスタムエラー",E_ERROR);
$getfilter="'|(and|or)b.+?(>|<|=|in|like)|/*.+?*/| $postfilter="b(and|or)b.{1,6}?(=|>|<|binb|blikeb)|/*.+?*/| $cookiefilter="b(and|or)b.{1,6}?(=|>|<|binb|blikeb)|/*.+?*/| 関数 Stop Attack($StrFiltKey,$StrFiltValue,$ArrFiltReq)
{
    if(is_array($StrFiltValue))
    {
        $StrFiltValue=implode($StrFiltValue);
    }
    if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1&&!isset($_REQUEST['securityToken']))
    {
        slog("
gt;
操作IP: ".$_SERVER["REMOTE_ADDR"]."
操作時間: ".strftime("%Y-%m-%d %H:%M :%S")."
操作面:".$_SERVER["PHP_SELF"]."
提交方法: ".$_SERVER["REQUEST_METHOD"]."
提交パラメータ: ".$StrFiltKey."
提交データ: ".$StrFiltValue);
        print "結果通知:不正な操作です!";
        出口();
    }
}
foreach($_GET as $key=>$value)
{
    Stop Attack($key,$value,$getfilter);
}
foreach($_POST as $key=>$value)
{
    Stop Attack($key,$value,$postfilter);
}
foreach($_COOKIE as $key=>$value)
{
    Stop Attack($key,$value,$cookiefilter);
}
  
関数 slog($logs)
{
    $toppath="log.htm";
    $Ts=fopen($toppath,"a+");
    fputs($Ts,$logs."rn");
    fclose($Ts);
}
?>

SQL分析: この関数を使用すると、この関数は PHP の標準的な障害処理を実行し、独自の障害処理プログラム (die()) を取得します。 次に、代コードの実行前にブロック処理が発生した場合には、ユーザが独自に設定したプログラムも実行されないため、ユーザの自筆によるブロック処理プログラムは実行されない。

同様に、PHP には PHP エラー処理機構があり、set_error_handler() を使用して PHP エラー処理を受信したり、trigger_error() 関数を使用して主にエラー メッセージを出力したりすることもできます。 set_error_handler() 関数は、ユーザー独自のエラー処理関数を設定し、実行中のユーザー独自のエラー処理メソッドを設定します。
関連する使用法:

复制代码

代番号如下:

functioncustomError($errno, $errstr, $errfile, $errline) {   echo "错误代码: [${errno}] ${errstr}rn";   echo "错误位置的代码行: {$errline} 文件{$errfile}rn";
   echo " PHP バージョン ",PHP_VERSION, "(" , PHP_OS, ")rn";
  // 死ぬ();
}
set_error_handler("customError",E_ALL| E_STRICT);

まとめ

PHP でエラーが発生すると、エラー スクリプトの場所、行番号、および理由が表示されますが、これは大したことではない、と多くの人が言います。しかし、実際のパスが漏洩した場合の影響は、一部の侵入者にとっては想像を絶するものであり、実際、多くのサーバーがこの問題を抱えています。 ネットワーク管理者の中には、PHP 設定ファイルの display_errors を Off に設定するだけで問題を解決する人もいますが、この方法はあまりにも消極的すぎると思います。場合によっては、デバッグのために PHP がエラー情報を返す必要があることがあります。また、何か問題が発生した場合は、ユーザーに説明したり、別のページに移動したりする必要がある場合もあります。しかし、set_error_handler() を使用すると、これらの矛盾を解決できます。しかし、この機能はほとんど使用されていないことがわかりました。

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

php正規表現SQL解析

$sql='
存在しない場合はテーブルを作成しますuploadtype(
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(20) DEFAULT '0',
sydefault char(1) DEFAULT '0' ,
PRIMARY KEY (id )
) ENGINE=MyISAM
';
preg_match('#CREATE TABLE.*\(.*\)ENGINE=MyISAM#isU',$sql,$typefile);
var_dump($typefile);

SQL 正規表現の一般的な記号

SQL 分類:
DDL—データ定義言語 (CREATE、ALTER、DROP、DECLARE)
DML—データ操作言語 (SELECT、DELETE、UPDATE、INSERT)
DCL—データ制御言語 (GRANT、REVOKE、COMMIT、ROLLBACK)

まず、基本的なステートメントについて簡単に説明します。
1. 説明: データベースを作成します
CREATE DATABASE データベース名
2. 説明: データベースを削除します
データベース dbname を削除します
3. SQL サーバーをバックアップします
---バックアップ データ用のデバイスを作成します
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- バックアップを開始します
BACKUP DATABASE pubs TO testBack
手順: 新しいデバイスを作成します。 table
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
既存のテーブルに基づいて新しいテーブルを作成します:
A: tab_old のようにテーブル tab_new を作成します (古いテーブルを使用します) table を作成して新しいテーブルを作成します)
B: tab_old 定義のみからテーブル tab_new を選択します
5. 説明: 新しいテーブルを削除します。drop table tabname
6. 列を追加します
テーブル tabname を変更して列を追加します。 type
注: 列を追加すると、削除することはできません。 DB2 では、列の追加後にデータ型を変更することはできません。変更できるのは、varchar 型の長さを増やすことだけです。
7. 手順: 主キーを追加: テーブルのタブ名を変更して主キーを追加(列)
手順: 主キーを削除: テーブルのタブ名を変更して主キーを削除
手順: インデックスを作成: タブ名に [一意の] インデックス IDxname を作成します。 (col ….)
インデックスの削除: インデックス idxname を削除します
注: インデックスを変更したい場合は、削除して再構築する必要があります。
9. 手順: ビューを作成します: select ステートメントとしてビュー viewname を作成します
ビューを削除します: ビュー viewname を削除します
10. 手順: いくつかの簡単な基本 SQL ステートメント
Select: select * from table1 where range
Insert: insert into table1( field1,field2)values(value1,value2)
削除: table1 から削除 where range
Update: table1 を更新 set field1=value1 where range
Search: select * from table1 where field1 like '%value1%' ---似た構文洗練された情報をチェックしてください!
Sort: select * from table1 order by field1,field2 [desc]
Total: select count(*) as totalcount from table1 from totalcount
Sum: select sum(field1) as sumvalue from table1
Average: select avg (フィールド 1) テーブル 1 の平均値として
最大...残りのテキスト>>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/907279.html技術記事 php の一般的な SQL 攻撃正規表現のまとめ、SQL 正規表現 この記事では、php の一般的な SQL 攻撃正規表現について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。