JAvascript xss攻撃防止

13767 ワード

JAvascript xss攻撃防止

XSS(Cross Site Scripting)は、攻撃者が別のユーザのブラウザで悪意のあるコードスクリプトを実行することを可能にするスクリプト注入攻撃である.本来縮小はCSSであるべきであるが、積層様式(Cascading Style Sheet,CSS)と区別するためにXSSと呼ぶ.
自分の開発過程で出会った問題を記録してください.
  • 入力ラベルはテキストボックスやテキストフィールドではありません.例えば div ,html contenteditable,設定がtrueに設定されている場合は編集可能であり、plaintext-onlyに設定されている場合は純テキストしか入力できないことを示していますが、現在はGoogleがサポートしている比較的良い
  • innerText(JQ text())不要innerHTML(JQ html())
  • ブラウザ内部変換器で変換
  • htmlトランスコード
    まずDIVなどのコンテナラベル要素を動的に作成し、変換する文字列をこの要素のinnerText(ie )またはtextContentに設定し(火狐、googleサポート)、最後にこの要素のinnerHTMLを返します.つまり、HTML符号化変換された文字列が得られます.
  • htmlデコード
    まずDIVなどのコンテナラベル要素を動的に作成し、変換する文字列をこの要素のinnerHTML(ie, ,google )に設定し、最後にこの要素のinnerText(ie )またはtextContentを返します(火狐、googleサポート)、すなわちHTML復号された文字列が得られます.
    var HtmlUtil = {
     2     /*1.           html  */
     3     htmlEncode:function (html){
     4         //1.              , DIV
     5         var temp = document.createElement ("div");
     6         //2.                  innerText(ie  )  textContent(  ,google  )
     7         (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
     8         //3.         innerHTML,     HTML         
     9         var output = temp.innerHTML;
    10         temp = null;
    11         return output;
    12     },
    13     /*2.           html  */
    14     htmlDecode:function (text){
    15         //1.              , DIV
    16         var temp = document.createElement("div");
    17         //2.                  innerHTML(ie,  ,google   )
    18         temp.innerHTML = text;
    19         //3.         innerText(ie  )  textContent(  ,google  ),     HTML       。
    20         var output = temp.innerText || temp.textContent;
    21         temp = null;
    22         return output;
    23     }
    24 };
    

  • 正規表現を用いるのもよく使われる処理方式であり、実現原理は置換方式を用いてトランスコードと復号を実現することであり、トランスコード時に**<>,スペース記号,&,’,"**をhtml符号に置換し、復号するとhtml符号を対応する文字に置換し、実現代符号は以下の通りである:
    var HtmlUtil = {
     2     /*1.        html  */
     3     htmlEncodeByRegExp:function (str){  
     4          var s = "";
     5          if(str.length == 0) return "";
     6          s = str.replace(/&/g,"&");
     7          s = s.replace(/,"<");
     8          s = s.replace(/>/g,">");
     9          s = s.replace(/ /g," ");
    10          s = s.replace(/\'/g,"'");
    11          s = s.replace(/\"/g,""");
    12          return s;  
    13    },
    14    /*2.        html  */
    15    htmlDecodeByRegExp:function (str){  
    16          var s = "";
    17          if(str.length == 0) return "";
    18          s = str.replace(/&/g,"&");
    19          s = s.replace(/</g,");
    20          s = s.replace(/>/g,">");
    21          s = s.replace(/ /g," ");
    22          s = s.replace(/'/g,"\'");
    23          s = s.replace(/"/g,"\"");
    24          return s;  
    25    }
    26 };