PHPのイタい入門書を読んでAjaxのXSSについて検討した(1)

 このエントリでは、あるPHPの入門書を題材として、Ajaxアプリケーションの脆弱性について検討します。全3回となる予定です。

このエントリを書いたきっかけ


 twitterPHPWebXAMPP/jQuery/HTML5We




XSSSQL



alert


 XSSSQLXAMPP

 HTMLAjax
 AjaxXSS Web AjaxXSSAjaxXSS
 P201-23


 (1)HTML5JavaScriptXMLHttpRequestjQeuryPHPAPI(2)MySQL3, 4(5)DOMjQueryAjax
 XSS


画面表示箇所(DOM)のXSS対策ができている例


 XSSDOMXSSXSSjQeurytext*1XmasP1766-4
function show(out){
  var res = out.split("<i>");
  $("#name").text(res[0]);
  $("#org").text(res[1]);
  $("#addr").text(res[2]);
  $("#tel").text(res[3]);
  $("#mail").text(res[4]);
  $("#course").text(res[5]);
  $("#nums").text(res[6]);
  $("#stat").text(res[7]);
}

 text<」などが適切にXSS


画面表示箇所(DOM)のXSS対策ができていない例


 XSStableHTMLP2097-4
var head = "<table border='1'><tr>";
head+="<th>ID</th>";
head+="<th>代表者名</th>";
head+="<th>所属組織</th>";
head+="<th>電話番号</th>";
head+="<th>コース</th>";
head+="<th>人数</th>";
head+="<th>登録日時</th>";
head+="<th>更新日時</th>";
$(function(){ 
    $("#rev").click(function(){
        $.get("revallxmas2.php", {}, show);
    });
});
function show(out){
    var body = "";
    var recs = out.split("<r>");
    for(var i = 0; i <recs.length; i++){
        body += "<tr>";
        var flds = recs[i].split("<i>");
        for(var j = 0; j <flds.length; j++){
            if(j!=5){
                body += "<td>" + flds[j] + "</td>";                 // ← ココ
            }else{
                body += "<td align='right'>" + flds[j] + "</td>";   // ← ココ
            }
        }
        body += "</tr>";
    }
    body += "</table>";
    $("#show").html(head+body);
}

 XSSHTMLhtmlflds[j]HTMLXSS<td>flds[j]XSS
 XSSalertXSS


 XSSHTML(PHP)JavaScriptJavaScript
 jQuery使jQueryjQuery使
function show(out){
    var table = $("<table border='1'><tr><th>ID</th><th>代表者名</th><th>所属組織</th><th>電話番号</th><th>コース</th><th>人数</th><th>登録日時</th><th>更新日時</th>");
    var recs = out.split("<r>");
    for(var i = 0; i < recs.length; i++) {
        var flds = recs[i].split("<i>");
        var row = $("<tr>");
        for(var j = 0; j < flds.length; j++) {
            if(j != 5) {
                col = $("<td>").text(flds[j]);
            } else {
                col = $("<td align='right'>").text(flds[j]);
            }
            row.append(col);
        }
        table.append(row);
    }
    $("#show").empty().append(table);
}

 tablerow(col)appendtextjQuery
 <」などが


HTMLエスケープをどこで行うか


 WebHTMLAjax


HTML

JavaScript


 Ajax便
 id:malaAjax

HTMLscriptJavaScriptXSS - 0   - subtech

まとめ


 AjaxXSSAjaxHTML
 AjaxXSSeval

[PR]


*1:id:mala text