成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP如何防止XSS攻擊

jone5679 / 3858人閱讀

摘要:防止跨站腳本攻擊的方法是針對(duì)非法的代碼包括單雙引號(hào)等,使用函數(shù)。和這兩個(gè)函數(shù)對(duì)之類的字符串支持不好都不能轉(zhuǎn)化所以用和轉(zhuǎn)化的字符串只能防止攻擊不能防止注入攻擊所有有打印的語句如,等在打印前都要使用進(jìn)行過濾,這樣可以防止,注意中文要寫出。

PHP防止XSS跨站腳本攻擊的方法:是針對(duì)非法的HTML代碼包括單雙引號(hào)等,使用htmlspecialchars()函數(shù) 。

在使用htmlspecialchars()函數(shù)的時(shí)候注意第二個(gè)參數(shù), 直接用htmlspecialchars($string) 的話,第二個(gè)參數(shù)默認(rèn)是ENT_COMPAT,函數(shù)默認(rèn)只是轉(zhuǎn)化雙引號(hào)(“), 不對(duì)單引號(hào)(‘)做轉(zhuǎn)義.

所以,htmlspecialchars函數(shù)更多的時(shí)候要加上第二個(gè)參數(shù), 應(yīng)該這樣用: htmlspecialchars($string,ENT_QUOTES).當(dāng)然,如果需要不轉(zhuǎn)化如何的引號(hào),用htmlspecialchars($string,ENT_NOQUOTES).

另外, 盡量少用htmlentities, 在全部英文的時(shí)候htmlentities和htmlspecialchars沒有區(qū)別,都可以達(dá)到目的.但是,中文情況下, htmlentities卻會(huì)轉(zhuǎn)化所有的html代碼,連同里面的它無法識(shí)別的中文字符也給轉(zhuǎn)化了。

htmlentities和htmlspecialchars這兩個(gè)函數(shù)對(duì) "之類的字符串支持不好,都不能轉(zhuǎn)化, 所以用htmlentities和htmlspecialchars轉(zhuǎn)化的字符串只能防止XSS攻擊,不能防止SQL注入攻擊.

所有有打印的語句如echo,print等 在打印前都要使用htmlentities() 進(jìn)行過濾,這樣可以防止Xss,注意中文要寫出htmlentities($name,ENT_NOQUOTES,GB2312) 。

(1).網(wǎng)頁不停地刷新 ""

(2).嵌入其它網(wǎng)站的鏈接 除了通過正常途徑輸入XSS攻擊字符外,還可以繞過JavaScript校驗(yàn),通過修改請(qǐng)求達(dá)到XSS攻擊的目的.

 $value) 
     {
        if (!is_array($value))
        {
          if (!get_magic_quotes_gpc())  //不對(duì)magic_quotes_gpc轉(zhuǎn)義過的字符使用addslashes(),避免雙重轉(zhuǎn)義。
          {
             $value  = addslashes($value); //給單引號(hào)(")、雙引號(hào)(")、反斜線()與 NUL(NULL 字符)
             加上反斜線轉(zhuǎn)義
          }
          $value       = preg_replace($ra,"",$value);     //刪除非打印字符,粗暴式過濾xss可疑字符串
          $arr[$key]     = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 標(biāo)記并轉(zhuǎn)換為 HTML 實(shí)體
        }
        else
        {
          SafeFilter($arr[$key]);
        }
     }
   }
}
?>
$str = "www.90boke.com";
SafeFilter ($str); //如果你把這個(gè)注釋掉,提交之后就會(huì)無休止刷新
echo $str;
//------------------------------php防注入和XSS攻擊通用過濾-----Start--------------------------------------------//
function string_remove_xss($html) {
    preg_match_all("/<([^<]+)>/is", $html, $ms);
 
    $searchs[] = "<";
    $replaces[] = "<";
    $searchs[] = ">";
    $replaces[] = ">";
 
    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";
        $ms[1] = array_unique($ms[1]);
        foreach ($ms[1] as $value) {
            $searchs[] = "<".$value.">";
 
            $value = str_replace("&", "_uch_tmp_str_", $value);
            $value = string_htmlspecialchars($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(""", """, $value) . ">";
        }
    }
    $html = str_replace($searchs, $replaces, $html);
 
    return $html;
}
//php防注入和XSS攻擊通用過濾 
function string_htmlspecialchars($string, $flags = null) {
    if (is_array($string)) {
        foreach ($string as $key => $val) {
            $string[$key] = string_htmlspecialchars($val, $flags);
        }
    } else {
        if ($flags === null) {
            $string = str_replace(array("&", """, "<", ">"), array("&", """, "<", ">"), $string);
            if (strpos($string, "&#") !== false) {
                $string = preg_replace("/&((#(d{3,5}|x[a-fA-F0-9]{4}));)/", "&1", $string);
            }
        } else {
            if (PHP_VERSION < "5.4.0") {
                $string = htmlspecialchars($string, $flags);
            } else {
                if (!defined("CHARSET") || (strtolower(CHARSET) == "utf-8")) {
                    $charset = "UTF-8";
                } else {
                    $charset = "ISO-8859-1";
                }
                $string = htmlspecialchars($string, $flags, $charset);
            }
        }
    }
 
    return $string;
}
//------------------php防注入和XSS攻擊通用過濾-----End--------------------------------------------//

PHP中的設(shè)置
PHP5.2以上版本已支持HttpOnly參數(shù)的設(shè)置,同樣也支持全局的HttpOnly的設(shè)置,在php.ini中

----------------------------------------------------- 
 session.cookie_httponly = 
-----------------------------------------------------

設(shè)置其值為1或者TRUE,來開啟全局的Cookie的HttpOnly屬性,當(dāng)然也支持在代碼中來開啟:

Cookie操作函數(shù)setcookie函數(shù)和setrawcookie函數(shù)也專門添加了第7個(gè)參數(shù)來做為HttpOnly的選項(xiàng),開啟方法為:

老版本的PHP就不說了。沒企業(yè)用了吧。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28174.html

相關(guān)文章

  • php安全問題思考

    摘要:用戶提交過來的數(shù)據(jù)都是不可信的,所以,在查庫或入庫前需要對(duì)提交過來的數(shù)據(jù)進(jìn)行過濾或字符的轉(zhuǎn)換處理,以防止注入或攻擊等問題。 用戶提交過來的數(shù)據(jù)都是不可信的,所以,在查庫或入庫前需要對(duì)提交過來的數(shù)據(jù)進(jìn)行過濾或字符的轉(zhuǎn)換處理,以防止SQL注入或xss攻擊等問題。 一、防止SQL注入 什么是SQL注入攻擊? 所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請(qǐng)求的查詢字...

    alphahans 評(píng)論0 收藏0
  • web 應(yīng)用常見安全漏洞一覽

    摘要:應(yīng)用常見安全漏洞一覽注入注入就是通過給應(yīng)用接口傳入一些特殊字符,達(dá)到欺騙服務(wù)器執(zhí)行惡意的命令。此外,適當(dāng)?shù)臋?quán)限控制不曝露必要的安全信息和日志也有助于預(yù)防注入漏洞。 web 應(yīng)用常見安全漏洞一覽 1. SQL 注入 SQL 注入就是通過給 web 應(yīng)用接口傳入一些特殊字符,達(dá)到欺騙服務(wù)器執(zhí)行惡意的 SQL 命令。 SQL 注入漏洞屬于后端的范疇,但前端也可做體驗(yàn)上的優(yōu)化。 原因 當(dāng)使用外...

    darkerXi 評(píng)論0 收藏0
  • web 應(yīng)用常見安全漏洞一覽

    摘要:應(yīng)用常見安全漏洞一覽注入注入就是通過給應(yīng)用接口傳入一些特殊字符,達(dá)到欺騙服務(wù)器執(zhí)行惡意的命令。此外,適當(dāng)?shù)臋?quán)限控制不曝露必要的安全信息和日志也有助于預(yù)防注入漏洞。 web 應(yīng)用常見安全漏洞一覽 1. SQL 注入 SQL 注入就是通過給 web 應(yīng)用接口傳入一些特殊字符,達(dá)到欺騙服務(wù)器執(zhí)行惡意的 SQL 命令。 SQL 注入漏洞屬于后端的范疇,但前端也可做體驗(yàn)上的優(yōu)化。 原因 當(dāng)使用外...

    Panda 評(píng)論0 收藏0
  • web安全基礎(chǔ)

    摘要:安全基礎(chǔ)常見的安全攻擊手段有很多,比如注入,,,頭攻擊,攻擊,重定向攻擊,上傳文件攻擊等,其中大多數(shù)都可以通過三種方法過濾代理轉(zhuǎn)義實(shí)體化來解決。個(gè)人趨向于安全狗,同時(shí)安裝服務(wù)器安全狗和網(wǎng)站安全狗可以有效地防護(hù)攻擊。 web安全基礎(chǔ) 常見的web安全攻擊手段有很多,比如SQL注入,XSS,CSRF,HTTP頭攻擊,cookie攻擊,重定向攻擊,上傳文件攻擊等,其中大多數(shù)都可以通過三種方法...

    starsfun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<