JavaA2Z

KAB-studio > プログラミング > JavaA2Z > サニタイジングとは

サニタイジング

日本語 消毒、無害化
英語 sanitizing
ふりがな さにたいじんぐ
フリガナ サニタイジング

解説

害を及ぼす情報を、害のない状態にすること。
 
主に、クロスサイトスクリプティング脆弱性を解決する処理を指す。
使用者が入力した情報を出力する際、HTMLの構造を変更したりJavaScriptとして実されないよう、置換処理をうことを「サニタイジング」「サニタイズする」と言う。
 
また、SQLインジェクションを避けるため、SQLとして機能しないように文字列を変換することも「サニタイジング」という。
 
クロスサイトスクリプティングの方が一般的のため、通常「サニタイジング」と言えばクロスサイトスクリプティングのサニタイジングを指すことの方が多いが、SQLインジェクションも認知されつつあるため、状況に応じてどちらを指すのか、それとも「無害化」という一般的な単語として使用しているのかを読み解く必要がある。
両者を区別するため、クロスサイトスクリプティング向けのサニタイジングを「HTMLサニタイジング」、SQLインジェクション向けのサニタイジングを「SQLサニタイジング」と呼ぶこともあるが、まだ一般的ではない。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

<!-- webapps/sample-servlet/form.html -->
<!-- http://localhost:8080/sample-servlet/form.html でアクセスできます。 --><HTML>
<HEAD>
<TITLE>入力フォーム</TITLE>
</HEAD>
<BODY>

<!-- 入力フォームです。 -->
<FORM METHOD="POST" ACTION="servlet/SampleServlet">
名前:<INPUT TYPE="text" NAME="name" SIZE="10"><BR>
<INPUT TYPE="submit" VALUE="実行"><BR>

</FORM>

</BODY>
</HTML>


// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.util.ArrayList;
import java.util.Iterator;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    /** 「お名前一覧」用リスト。 */
    private static final ArrayList names = new ArrayList();

    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // 入力値の文字コードをセットします。
        // HTMLの文字コードを指定してください。
        request.setCharacterEncoding( "Windows-31J" );

        // 入力フォームから入力された値を取得します。
        String name = request.getParameter( "name" );
        System.out.println( name );
        // (入力フォームの「名前:」に入力された文字列)

        // 入力された名前を追加します。
        if( ( name != null ) && ( name.equals( "" ) == false ) )
        {
            names.add( name );
        }
        // 注:通常は、データベースに登録します。
        // また、この方法だと同期が取れていませんので、複数のブラウザで
        // 同時にアクセスするとうまくいかないでしょう。

        // HTML出力用のPrintWriterを取得します。
        PrintWriter out = response.getWriter();

        // HTMLを出力します。
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>サーブレットのテスト</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( "入力された値:" );

        // こちらは自分の入力した情報を出力するので特に必要はないのですが、
        // 念のためサニタイジングします。
        out.println( sanitizing( name ) );
        out.println( "<BR>" );

        // 名前一覧を出力します。
        for( Iterator iter = names.iterator(); iter.hasNext(); )
        {
            String currentName = (String)iter.next();
            // そのまま出力すると、クロスサイトスクリプティングができてしまうので
            // サニタイジングします。
            currentName = sanitizing( currentName );
            out.println( currentName );
            out.println( "<BR>" );
        }

        out.println( "</BODY>" );
        out.println( "</HTML>" );
    }

    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException 
    {
        // でも面倒なのでdoGet()メソッドに丸投げします。
        doGet( request, response );
    }

    /**
     * サニタイジングを行います。
     */
    private String sanitizing( String string )
    {
        string = string.replaceAll( "&""&amp;" );
        string = string.replaceAll( "<""&lt;" );
        string = string.replaceAll( ">""&gt;" );
        string = string.replaceAll( "\"""&quot;" );
        string = string.replaceAll( "'""&#39;" );
        return string;
    }
}
<!-- webapps/sample-servlet/form.html -->
<!-- http://localhost:8080/sample-servlet/form.html でアクセスできます。 --><HTML>
<HEAD>
<TITLE>入力フォーム</TITLE>
</HEAD>
<BODY>

<!-- 入力フォームです。 -->
<FORM METHOD="POST" ACTION="servlet/SampleServlet">
名前:<INPUT TYPE="text" NAME="name" SIZE="10"><BR>
<INPUT TYPE="submit" VALUE="実行"><BR>

</FORM>

</BODY>
</HTML>


// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.util.ArrayList;
import java.util.Iterator;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    /** 「お名前一覧」用リスト。 */
    private static final ArrayList names = new ArrayList();

    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // 入力値の文字コードをセットします。
        // HTMLの文字コードを指定してください。
        request.setCharacterEncoding( "Windows-31J" );

        // 入力フォームから入力された値を取得します。
        String name = request.getParameter( "name" );
        System.out.println( name );
        // (入力フォームの「名前:」に入力された文字列)

        // 入力された名前を追加します。
        if( ( name != null ) && ( name.equals( "" ) == false ) )
        {
            names.add( name );
        }
        // 注:通常は、データベースに登録します。
        // また、この方法だと同期が取れていませんので、複数のブラウザで
        // 同時にアクセスするとうまくいかないでしょう。

        // HTML出力用のPrintWriterを取得します。
        PrintWriter out = response.getWriter();

        // HTMLを出力します。
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>サーブレットのテスト</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( "入力された値:" );

        // こちらは自分の入力した情報を出力するので特に必要はないのですが、
        // 念のためサニタイジングします。
        out.println( sanitizing( name ) );
        out.println( "<BR>" );

        // 名前一覧を出力します。
        for( Iterator iter = names.iterator(); iter.hasNext(); )
        {
            String currentName = (String)iter.next();
            // そのまま出力すると、クロスサイトスクリプティングができてしまうので
            // サニタイジングします。
            currentName = sanitizing( currentName );
            out.println( currentName );
            out.println( "<BR>" );
        }

        out.println( "</BODY>" );
        out.println( "</HTML>" );
    }

    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException 
    {
        // でも面倒なのでdoGet()メソッドに丸投げします。
        doGet( request, response );
    }

    /**
     * サニタイジングを行います。
     */
    private String sanitizing( String string )
    {
        string = string.replaceAll( "&", "&amp;" );
        string = string.replaceAll( "<", "&lt;" );
        string = string.replaceAll( ">", "&gt;" );
        string = string.replaceAll( "\"", "&quot;" );
        string = string.replaceAll( "'", "&#39;" );
        return string;
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/09/03
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。