以下防止 SQL Injection 的程式是參考 AppleBOY 這篇文章 : PHP+MySQL 環境下 SQL Injection 攻防戰

//處理 SQL Injection
if( is_array($_POST) && !get_magic_quotes_gpc())
{
    while( list($k, $v) = each($_POST) )
    {
        $$k = checkhtml(mysql_real_escape_string(trim($v)));
    }
    @reset($_POST);
}

以下防止 XSS 攻擊的程式是參考 Discuz 的程式碼

function checkhtml($html) {
    //if(!checkperm('allowhtml')) {
 
        preg_match_all("/\<([^\<]+)\>/is", $html, $ms);
 
        $searchs[] = '<';
        $replaces[] = '&lt;';
        $searchs[] = '>';
        $replaces[] = '&gt;';
 
        if($ms[1]) {
            $allowtags = 'img|a|font|div|table|tbody|caption|tr|td|th|br|p|b|strong|i|u|em|span|ol|ul|li|blockquote|object|param|embed';
            $ms[1] = array_unique($ms[1]);
            foreach ($ms[1] as $value) {
                $searchs[] = "&lt;".$value."&gt;";
 
                $value = str_replace('&', '_uch_tmp_str_', $value);
                $value = dhtmlspecialchars($value);
                $value = str_replace('_uch_tmp_str_', '&', $value);
 
                $value = str_replace(array('\\','/*'), array('.','/.'), $value);
                $skipkeys = array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut','onbeforedeactivate',
                        'onbeforeeditfocus','onbeforepaste','onbeforeprint','onbeforeunload','onbeforeupdate','onblur','onbounce','oncellchange','onchange',
                        'onclick','oncontextmenu','oncontrolselect','oncopy','oncut','ondataavailable','ondatasetchanged','ondatasetcomplete','ondblclick',
                        'ondeactivate','ondrag','ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop','onerror','onerrorupdate',
                        'onfilterchange','onfinish','onfocus','onfocusin','onfocusout','onhelp','onkeydown','onkeypress','onkeyup','onlayoutcomplete',
                        'onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel',
                        'onmove','onmoveend','onmovestart','onpaste','onpropertychange','onreadystatechange','onreset','onresize','onresizeend','onresizestart',
                        'onrowenter','onrowexit','onrowsdelete','onrowsinserted','onscroll','onselect','onselectionchange','onselectstart','onstart','onstop',
                        'onsubmit','onunload','javascript','script','eval','behaviour','expression','style','class');
                $skipstr = implode('|', $skipkeys);
                $value = preg_replace(array("/($skipstr)/i"), '.', $value);
                if(!preg_match("/^[\/|\s]?($allowtags)(\s+|$)/is", $value)) {
                    $value = '';
                }
                $replaces[] = empty($value)?'':"<".str_replace('&quot;', '"', $value).">";
            }
        }
        $html = str_replace($searchs, $replaces, $html);
    //}
 
    return $html;
}

bojack 發表在 痞客邦 PIXNET 留言(0) 人氣()