ホームページ > バックエンド開発 > PHPチュートリアル > DZ フォーラムのコア コード分析 - コア ファイル global.func.php_PHP チュートリアル

DZ フォーラムのコア コード分析 - コア ファイル global.func.php_PHP チュートリアル

WBOY
リリース: 2016-07-21 14:57:06
オリジナル
1222 人が閲覧しました

前回の記事をお読みください: DZ フォーラム コア コード分析計画 - パッケージのインストール

global.func.php の分析が完了するまでに 2 日かかりました。 common.inc.php ファイルも 3 日で完成させる予定でしたが、多くのファイルが分割されていることがわかりました。そこで今回の投稿は戦略を変更します。まず、global.func.php ファイルを分析しましょう。 。貧弱な分析。いろんなものが何のためにあるのか分かりません。 。 。 DZ ファイル システム全体で参照されていない関数もいくつか見つかりました。もしかしたらテスト機能なのかもしれません。しかし、とても便利です。私はそれを独自の機能パッケージに組み込みました。
このパッケージには大量のコードが含まれているためです。各コード ブロックを慎重に分析して、個人的に重要なコードのみを取り出します。
前回の記事分析計画では、実は 2 つのファイルを見逃していました。1 つは DZ フォーラムのグローバル変数宣言テーブルです。 DZ フォーラム ファイルの機能テーブル。 DZ フォーラムの関数呼び出しテーブル。
現時点では分析するものが少ないため、ここにはアップロードしていません。すべてが完了するまで待ちましょう。
勉強日記は以下の通りです

一部のみ更新しております。 。 。 。別の部分もあります。 。午後に更新します

以下引用内容:
Golbal.func.php
日記時刻:2008年10月7日 10時37分34秒
1. このファイルは頻繁に引用されるファイルなので、最初はいつもの定数判定方式を採用しています。 。悪意のあるブラウザによって直接開かれないようにします
2. 暗号化関数 authcode の暗号化には、複数の md5 暗号が重畳されています。パスワードを安全に保管してください。一般的な考え方では、暗号化は通常 1 回だけ行われます。そしてDZの暗号化機能。暗号化アルゴリズムは複雑です。それぞれMD5暗号化、文字ランダム切り捨て暗号化、ビット演算暗号化、鍵と組み合わせた暗号化があります。
3. DZ の文字処理は非常にうまく機能します。ただし、ダウンロード時に utf-8 または gbk を選択します。ただし、文字を扱う場合でも、データベース リンクを扱う場合でも、最初に考慮すべきは文字エンコーディングです。形式は、db_mysql.class.php ファイルのデータベース リンクで決まります。コードは以下の通りです
$func = empty($pconnect) ? 'mysql_connect' : 'mysql_pconnect';

//クラスの属性リンクへのリンクを作成します。また、リンク確立時にエンコード方式を設定します。

if(!$this->link = @$func($dbhost, $dbuser, $dbpw, 1)) {

$halt && $this->halt('MySQL サーバーに接続できません') ;

} else {

if($this->version() > '4.1') {

グローバル $charset, $dbcharset;

$dbcharset = $dbcharset2 : $dbcharset;

$dbcharset = !$dbcharset && in_array(strto lower($charset), array('gbk', 'big5', 'utf-8')) str_replace('-', '', $charset) : $dbcharset;

$serverset = $dbcharset ? 'character_set_connection='.$dbcharset.'、character_set_results='.$dbcharset.'、character_set_client=binary' : '';

$serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',').'sql_mode=''') : '';

$serverset && mysql_query("SET $serverset", $this-> ;link);

}
global.func.php ファイル内の文字列処理では、文字列のエンコード形式も考慮されます。
エンコード形式を設定するために使用されるグローバル変数 $charset があります。 Cutstr は、この変数の値に基づいて文字列を処理します。
さらに、cutstr() 関数では、文字列内の特殊文字は切り捨てられる前に処理されます。


$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);


切り捨てを処理した後、復元します。


$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
これは、DZ フォーラムの切り詰められたテキストが依然として元のテキスト形式に準拠している理由を説明できます。
4. HTMLコード形式の置換をカスタマイズします。しかしここで、DZ は非常に思慮深いことに注意する必要があります。 Ar if (IS_ARAY ($ String)) {

Foreach ($ String as $ key = & gt; $ value) {

$ String [$ key] = dhtmlspecialchars ($ Val); // その後、配列が独自の関数を呼び出します。単一の文字を処理する関数。

}
受信文字列が配列であるかどうかを判断するにはどうすればよいですか?親切。私のアイデアは、キャラクターの置換部分のみをカプセル化することです。しかし、彼はそれをここで非常にうまく要約しました。この関数を呼び出すときに渡す文字列の形式を気にする必要がないからです。
5. ページジャンプを dheader 関数にカプセル化します
6. //コードの繰り返し入力を減らすための代表的な機能。電子メール文字列を処理します。エンコードされたメール アドレスを返すには、emailconv (メール アドレス) のみが必要です
function emailconv($email, $tolink = 1) {

$email = str_replace(array('@', '.'), array('@' , '.'), $email);

return $tolink ? ''.$email.''
}
7, //ファイル名を切り捨て、ファイル名を入力し、処理後のファイル名を返します
function fileext($filename) {

return Trim(substr(strrchr($filename, '. '), 1, 10));
}
8. DZ は、ブラウザからの直接入力パス アクセスの問題に対処するために判定定数方式を使用します。しかし、ロボットはどうでしょうか?ロボットには定数はありません。ただし、php にはカスタム定数 $_SERVER['HTTP_USER_AGENT'] があります。これら 2 つはロボットの名前を決定するために使用されます。名前も入っています。したがって、ロボットの判断方法は次のようになります。
//この関数を呼び出す common.inc.php ファイルを分析することによって。ロボットの扱い方を決定するための機能です。
function getrobot() {

if(!define('IS_ROBOT')) {

//検索エンジン名を定義します

$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla' ;

//ブラウザの種類名を定義します

$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';

//これらのブラウザのいずれかである場合は、IS_ROBOT 定数を false として定義します。それ以外の場合は、スパイダーが上で定義した検索エンジンであるかどうかを判断し、そうであれば IS_ROBOT 定数を true に定義します。どちらの条件も満たされない場合は、IS_ROBOT 定数を false として定義します。

if(preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {

define('IS_ROBOT', FALSE);

} elseif(preg_match("/($kw_spiders) /i", $_SERVER['HTTP_USER_AGENT'])) {

define('IS_ROBOT', TRUE);

} else {

define('IS_ROBOT', FALSE);

}

}

/ /IS_ROBOT 定数の値を返します

return IS_ROBOT;
}
common.inc.php ファイルの呼び出しは次のように処理されます:
//この定数を使用すると、ロボットはこのページに自由にアクセスできなくなります。
define('IS_ROBOT', getrobot());
if(define('NOROBOT') && IS_ROBOT) {

exit(header("HTTP/1.1 403 Forbidden"));
}
まだあるようです一定の方法。この定数の値が関数 getrobot() を通じて取得されるだけです。

更新エラー: これらは、呼び出された場所の分析から判明したエラーです。でもそれを調べて変えるのは無理なので、ここで説明します
以下は引用内容です:
check lowerlimit(): この関数はポイント制限を確認するために使用されます

以下の方々のご協力に感謝いたします

以下は引用内容です:
dongxin1390008 氏は次のように述べています:dddslashes 関数は、php.ini ファイルの 'MAGIC_QUOTES_GPC オプションがオンになっているかどうかを確認します。これがオフになっている場合、SQL インジェクションを実行するのが簡単です。オフにするには、一重引用符にラッシュを付けて # 番号をエスケープします。 2008-10-6 17:33:30 添付ファイル パッケージを更新してこのコメントを追加します

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/364108.html技術記事前回の記事はこちら: DZフォーラムコアコード解析計画 - パッケージのインストール global.func.phpの解析が完了するまでに2日かかりました。 common.inc.phpファイルも3日で完成させる予定でしたが、また分離してしまいました…
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート