Yii 2のXSS攻撃防止策分析

5352 ワード

本論文の実例はYii 2のXSS攻撃防止策について述べる.皆さんに参考にしてあげます.具体的には以下の通りです.
XSSホール修復
原則:お客様が入力したデータを信じません.攻撃コードは必ずしも中にあるとは限りません.

①重要なクッキーをhttp onlyと表記すると、Javascriptのdocument.co okie文はcookieに取得できなくなります.例えば、年齢のtextboxでは、ユーザーが数字を入力することしかできません.数字以外の文字はフィルタリングされます.br/>③データをHtml Ecode処理
④特殊なHtmlタグをフィルタまたは除去します.例えば、script、iframe、<for for>for
⑤JavaScriptイベントのラベルをフィルタします.例えば、「onclick="、"、"onfocus"」などです.
<p>Yii中のXSS防犯


<div class=「jb 51 code」>

name) ?>


<p>この方法のソースコード:


<div class=「jb 51 code」>

/**
* Encodes special characters into HTML entities.
* The [[\yii\base\Application::charset|application charset]] will be used for encoding.
* @param string $content the content to be encoded
* @param boolean $doubleEncode whether to encode HTML entities in `$content`. If false,
* HTML entities in `$content` will not be further encoded.
* @return string the encoded content
* @see decode()
* @see http://www.php.net/manual/en/function.htmlspecialchars.php
*/
public static function encode($content, $doubleEncode = true)
{
  return htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE, Yii::$app->charset, $doubleEncode);
}


<p>httmlspecialchars&httmlentities&urlencodeの3つの違い:


http://php.net/manual/zh/function.htmlspecialchars.php
http://php.net/manual/zh/function.htmlentities.php
http://cn2.php.net/manual/zh/function.urlencode.php


Available flags constants
Content Name Description
ENTuCOMPAT Will convert doub-quot tes and leave single-quot;tes alone.
ENTUQOTES Will convert both double and single quot. Will leave both double and single quot tes unconverted.
ENT_NORE Silently discard invalid code unit sequences instead of returning an empty string.Using this flags discouraged as it」may have security implication.
ENTsuBSTITtTE Replace invalid code unit sequences with a Unicode Replaccement Chracter U+FFFD(UTF-8)or FFFD;(otherswise)instead of returning an empty string.
ENTudisaLLOWED Replace invalid code points for the given document type with a Unicode Replaccement Chracter U+FFFD(UTF-8)or FFFD;(otherswise)instead of leaving them as is.This may be useful,for instance,to extherements Fored 401 Handle code as HTML 4.01.
ENTHML 1 Handle code as XML 1.
ENTHuXHTML Handle code as XHTML.
ENT_ML 5 Handle code as HTML 5.


<p>httmlspecialchars


<p>Covert special characters to HTML entities


<div class=「jb 51 code」>

string htmlspecialchars ( 
      string $string 
      [, int $flags = ENT_COMPAT | ENT_HTML401 
      [, string $encoding = ini_get("default_charset") 
      [, bool $double_encode = true ]
    ]
  ] 
)


<p>The translations performed are:


&becomps&
「(double)becompes」when ENTUOTES is not set.
'becompes'(or')only when ENTYOTS set.

<div class=「jb 51 code」>


Test", ENT_QUOTES);
echo $new; // Test
?>


<p>httmlentities


<p>Covert all apple characters to HTML entities


<div class=「jb 51 code」>

string htmlentities ( 
      string $string 
      [, int $flags = ENT_COMPAT | ENT_HTML401 
      [, string $encoding = ini_get("default_charset") 
      [, bool $double_encode = true ]
    ]
  ] 
)


<div class=「jb 51 code」>

bold";
// Outputs: A 'quote' is bold
echo htmlentities($str);
// Outputs: A 'quote' is bold
echo htmlentities($str, ENT_QUOTES);
?>


<p>urlencode


URLコードはurl規格に適合するためです.標準的なurl規格では中国語と多くの文字はurlに出現してはいけません.

例えばbaiduで「漢字テスト」を検索します.URLは
になります.http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsvubp=0&rsvust=3&input=7477


URL符号化とは、アルファベットでない文字を全部百点(%)の後と二桁の十六進数に置き換え、スペースはプラス記号(+)
とします.この文字列では、-_.以外のすべてのアルファベットではなく、プラス記号(%)と16進数に置き換えられます.スペースはプラス記号(+)として符号化されます.この符号化はWWWフォームPOSTデータの符号化方式と同じであり、また、aplication/x-www-form-urlencodedのメディアタイプ符号化方式と同じである.この符号化は、歴史的な理由から、スペースをプラス記号(+)として符号化する点でRFC 1738符号化(rawurlencode(参照)とは異なる.
<div class=「jb 51 code」>


';
?>


<div class=「jb 51 code」>

';
?>


<p>より多くのYii関連内容に興味がある読者は、当駅のテーマを確認してください.「Yiiフレーム入門及び常用テクニックまとめ」、「php優秀開発フレームワークまとめ」、「smartyテンプレート入門基礎教程」、「php対象プログラム設計入門教程」、「php文字列(string)用法まとめ」、「php+mysqlデータベース操作入門教程」及び「phpよくあるデータベース操作技術まとめ」


<p>ここで述べたいのですが、Yiiフレームに基づくPHPプログラムの設計に役立ちます.


<div class=「clearfix」>
<span id=「artbaot」class=「jbTestPos」/>