PHP Spoofchecker类

rin*_*t.6 4 php localization internationalization intl

我正在阅读PHP手册,并在intl扩展文档页面中遇到了这个Spoofchecker.类中的方法,它们的参数以及类本身都是公平的,所以我想知道它的目的是什么.

akk*_*kky 5

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

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

这是我使用Spoofchecker类的简短示例代码.我自己还没有将它用于真实网站,但我认为当你需要从用户输入生成和显示来自URL的外部链接时,它会很有用.如果恶意的人试图将其他访问者带到虚假网站而不是谷歌,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'
    )
);
Run Code Online (Sandbox Code Playgroud)

您可以在此表中查看哪些字符被认为是可混淆的.