ホームページ  >  記事  >  バックエンド開発  >  php substr_replace は指定された位置の文字を置換し、メモリ破損を引き起こす脆弱性_PHP チュートリアル

php substr_replace は指定された位置の文字を置換し、メモリ破損を引き起こす脆弱性_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:02:251319ブラウズ

phpチュートリアルsubstr_replaceは指定された位置の文字を置換し、メモリ破損の脆弱性を修正します

ヒントとメモ
注: start が負で、length が start 以下の場合、length は 0 になります。

$ユーザー名 = "ゾンジ"; echo substr_replace($username,'**','1','2');

定義と使用法

substr_replace() 関数は、文字列の一部を別の文字列に置き換えます。

文法

substr_replace(文字列,置換,開始,長さ)パラメータの説明
文字列が必要です。チェックする文字列を指定します。
交換が必要です。挿入する文字列を指定します。
開始が必要です。文字列内のどこから置換を開始するかを指定します。

正の数 - 開始オフセットで置換を開始します

負の数値 - 文字列の末尾からのオフセット開始位置から置換します
0 - 文字列の最初の文字から置換を開始します

charlist オプション。置換する文字数を指定します。

正の数値 - 置換される文字列の長さ

負の数 - 文字列の末尾から置換される文字数
0 - 置換ではなく挿入

関数はphpのsubstr_replace()と同じです

'パラメータ: 置換されたコンテンツ、置換されたコンテンツ、開始ビット、置換された長さ

関数substr_replace(sourcecon,repcon,startx,lenx)

ぼんやりと
reped = Mid(sourcecon,startx,lenx) '同じ長さの元のコンテンツを抽出します
薄暗いスクレフトx、スクレフト
scleftx = startx-1
scleftx 頭蓋骨 = ""
それ以外
scleft = left(sourcecon,scleftx)
終了したら
Substr_replace = replace(sourcecon,reped,repcon,startx,1)
Substr_replace = scleft&substr_replace
関数終了

() 割り込みメモリ破損の脆弱性

バグラクID:
CVE ID:cve-2010-2190
cncve id:cncve-20102190

脆弱性の公開時期: 2010-05-31
脆弱性更新時間: 2010-06-28

脆弱性の原因
設計ミス
危険レベル
低い

インパクトシステム
php 5.2 php 5.3
システムには影響しません

危険
リモートの攻撃者がこの脆弱性を悪用して機密情報を漏洩する可能性があります。

攻撃に必要な条件
攻撃者は、substr_replace() 関数を使用するアプリケーションにアクセスする必要があります。

脆弱性情報
PHP は人気のある Web プログラミング言語です。
PHP の substr_replace() 関数には情報漏洩の問題があります:

php_function(substr_replace)
{
    ...
    if (zend_parse_parameters(zend_num_args() tsrmls_cc, "zzz|z", &str, &repl, &from, &len) == 失敗) {
        戻ります;
    }
   
    if (z_type_pp(str) != is_array) {
        Convert_to_string_ex(str);
    }
    if (z_type_pp(repl) != is_array) {
        Convert_to_string_ex(repl);
    }
    if (z_type_pp(from) != is_array) {
        Convert_to_long_ex(から);
    }
    if (argc > 3) {
        Separate_zval(len);
        if (z_type_pp(len) != is_array) {
            Convert_to_long_ex(len);
            l = z_lval_pp(len);
        }
    } その他 {
        if (z_type_pp(str) != is_array) {
            l = z_strlen_pp(str);
        }
    }
    if (z_type_pp(str) == is_string) {
        もし(
            (argc == 3 && z_type_pp(from) == is_array) ||
            (argc == 4 && z_type_pp(from) != z_type_pp(len))
        ){
            php_error_docref(null tsrmls_cc, e_warning, "'from' と 'len' は同じ型である必要があります - 数値または配列 ");
            return_stringl(z_strval_pp(str), z_strlen_pp(str), 1);     
        }
異なる種類の 'from' および 'len' パラメータを substr_replace() 関数で使用すると、e_warning エラーが発生する可能性があります。php が参照転送機能を使用していない場合、ユーザーの空間制限プロセッサはこの中断を使用して 'str' パラメータの種類を変更する可能性があります。 「str」型が整数型に変更された場合、内部蓄積が発生する可能性があります。「str」が数値型に変更された場合、重要な内部蓄積オフセットの使用が許可されます。


http://www.bkjia.com/PHPjc/445368.html

本当http://www.bkjia.com/PHPjc/445368.html技術記事 php 教程 substr_replace の代替指定位置文字と内部の破損した穴のヒントと注釈 注: start が適切な数で、長さが start より小さい場合、長さは 0 になります。 $username =...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。