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)異なる種類の 'from' および 'len' パラメータを substr_replace() 関数で使用すると、e_warning エラーが発生する可能性があります。php が参照転送機能を使用していない場合、ユーザーの空間制限プロセッサはこの中断を使用して 'str' パラメータの種類を変更する可能性があります。 「str」型が整数型に変更された場合、内部蓄積が発生する可能性があります。「str」が数値型に変更された場合、重要な内部蓄積オフセットの使用が許可されます。
{
...
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);
}
http://www.bkjia.com/PHPjc/445368.html