4

我正在阅读 PHP 手册,并在intl 扩展文档页面中遇到了Spoofchecker该类。类中的方法、它们的参数以及类本身现在都没有记录,所以我想知道它的目的是什么。

4

2 回答 2

5

该课程正在调用ICU 的库,因此您可以找到更多详细信息。他们在那里说

由于 Unicode 包含如此大量的字符并包含世界上各种不同的书写系统,因此不正确的使用可能会使程序或系统受到可能的安全攻击。本文档指定了可用于检测可能的安全问题的机制。

这是我使用 Spoofchecker 类的简短示例代码。我自己还没有将它用于真实站点,但我认为当您需要从用户输入的 URL 生成和显示外部链接时,它会很有用。如果恶意人员试图将其他访问者带到虚假网站而不是 Google、Paypal、URL 较短等,您可以取消链接,或拒绝其提交。

if(!extension_loaded('intl') || !class_exists("Spoofchecker")) {
    exit ('turn on php_intl extension first');
}

$checker = new Spoofchecker();

// false: all letters are in ASCII
var_dump($checker->isSuspicious("goog1e.com"));
// true: the first Cyrillic letter is from different set
var_dump($checker->isSuspicious("Рaypal.com"));

// true: digit one instead of small L
var_dump(
    $checker->areConfusable(
        'google.com',
        'goog1e.com'
    )
);

// false: digit zero and small O are not confusable
var_dump(
    $checker->areConfusable(
        'google.com',
        'g00g1e.com'
    )
);

// true: Cyrillic letter instead of P
var_dump(
    $checker->areConfusable(
        'Рaypal.com',
        'Paypal.com'
    )
);

// true: Japanese Katakana and Hiragana 'he'
var_dump(
    $checker->areConfusable(
        'ヘいせい.com',
        'ヘいせい.com'
    )
);

// true: identical detected as confusable so you might check === first
var_dump(
    $checker->areConfusable(
        'google.com',
        'google.com'
    )
);

您可以检查此表上哪些字符被认为是易混淆的。

于 2013-07-04T00:41:54.573 回答
0

正如 Mark Ba​​ker 的评论所指出的,SpoofChecker 是一种 PHP 机制,用于在处理 Unicode 字符串时检测可能的安全问题。

由于 Unicode 包含如此大量的字符并包含世界上各种不同的书写系统,因此不正确的使用可能会使程序或系统受到可能的安全攻击。

资料来源:http ://www.unicode.org/reports/tr39/

于 2013-07-04T00:34:09.607 回答