AMO 防範 XSS 的方式

edited 十月 2013 in CakePHP
AMO = addons.mozilla.org

之前有提過, AMO 是以 CakePHP 設計:
http://twpug.net/modules/newbb/viewtopic.php?topic_id=3020

其中一個開發者分享了他們用來阻擋 XSS 攻擊的方式:
http://micropipes.com/blog/2009/02/23/how-addonsmozillaorg-defends-against-xss-attacks/

先是在 bootstrap.php 加入下面程式碼:
if (array_key_exists('url',$_GET) &&
    !preg_match('/\/api\//', $_GET['url']) &&
    preg_match('/[^\w\d\/\.\-_!: ]/u',$_GET['url'])) {
    header("HTTP/1.1 400 Bad Request");
    exit;
}
用來過濾控制字元

接著在 app_controller 加入
$sanitize_patterns = array(
    'patterns'      => array("/%/u", "/\(/u", "/\)/u", "/\+/u", "/-/u"),
    'replacements'  => array("%", "(", ")", "+", "-")
    );

........

$data = iconv('UTF-8', 'UTF-8//IGNORE', $data);
$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
$data = preg_replace($sanitize_patterns['patterns'], $sanitize_patterns['replacements'], $data);

iconv 那行用來過濾無法辨識的字元,用來避免 C0 ASCII control code問題,其他的兩行就是置換各種可能產生問題的字元。

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3964

評論

Sign In or Register to comment.