0

クライアントへの印刷に通常の JSP フォームを使用する場合、web.xml を適切に構成するとうまくいきます (http://stackoverflow.com/questions/2147958/how-do-i-prevent-people-from-doing-xss-in -java)。

JSON経由でjQuery関数に送信される文字列をエスケープ/エンティティ化する方法に関する「ベストプラクティス」はありますか? 推奨されるライブラリまたは Spring Web Framework ビルドインはありますか?

  1. jQuery $.ajax-call to Spring MVC
  2. Spring MVC は JSON で応答します
  3. (マジック エンコーディングが発生します。たとえば、 に<a>なります&lt;a&gt;) <= this one
  4. jQuery は JSON を受け取り、XSS セーフな DOM に入力します。

前もって感謝します!

編集: 意図的に HTML を送信することもあるため、ソリューションはユーザー入力のみを処理できる必要があります。おそらく、ユーザーが汚染したすべての文字列を手動でサニタイズする必要があることが判明するでしょうか?

4

1 に答える 1

1

私が使用するために書いたこのクラスを試してください。ケースが欠落しているかどうかを確認するのに役立つ場合があります。. . 詳細なテストはまだ行われていないためです。

問題が発生した場合は、お知らせください。. . (対応する jar Apache commons および net.sf.json を追加します)

package myutil;

import java.util.Iterator;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringEscapeUtils;

public class JSONCleaner {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JSONObject jsonchild2=new JSONObject();
        jsonchild2.put("subchlidkey1", "subchildvalue1");
        jsonchild2.put("subchlidkey2", "subchildvalue2");
        jsonchild2.put("subchlidkey3", "subchildvalue3");

        JSONObject jsonchild=new JSONObject();
        jsonchild.put("chlidkey1", "childvalue1");
        jsonchild.put("chlidkey2", "childvalue2");
        jsonchild.put("chlidkey3", "childvalue3");

        JSONArray jsonarray=new JSONArray();
        jsonarray.add("option1");
        jsonarray.add("<p>option2</p>");
        jsonarray.add(jsonchild2);

        JSONObject json=new JSONObject();
        json.put("name", "<b>nirbhay</b>");
        json.put("age", 23);
        json.put("jsonChildObject", jsonchild);
        json.put("weight", 65);
        json.put("array", jsonarray);

        System.out.println(cleanJSONObject(json));
        //System.out.println(json.getString("name"));
    }

    public static JSONObject cleanJSONObject(JSONObject jsonObject)
    {
        JSONObject returnJson=new JSONObject();
        Iterator<?> keys = jsonObject.keys();
        while( keys.hasNext() ){
            String key = (String)keys.next();
            //System.out.println(jsonObject.get(key));
            if(jsonObject.optJSONObject(key)==null)
            {
                if(jsonObject.optJSONArray(key)!=null)
                {
                returnJson.put(key, cleanJSONArray(jsonObject.getJSONArray(key)));
                }
                else
                {
                    returnJson.put(key, StringEscapeUtils.escapeHtml(jsonObject.getString(key)));
                }
            }
            else
            {
                returnJson.put(key,cleanJSONObject(jsonObject.optJSONObject(key)));
            }
        }

        return returnJson;
    }

    private static JSONArray cleanJSONArray(JSONArray array)
    {

        JSONArray returnArray=new JSONArray();
        for(int i=0,j=array.size();i<j;i++)
        {
            if(array.optJSONObject(i)==null)
            {
                if(array.optJSONArray(i) != null)
                {
                returnArray.add(cleanJSONArray((JSONArray) array.get(i)));
                }
                else
                {
                    returnArray.add(StringEscapeUtils.escapeHtml(array.getString(i)));
                }
            }
            else
            {
                returnArray.add(cleanJSONObject((JSONObject) array.get(i)));
            }

        }
        return returnArray;
    }
}
于 2013-02-20T09:44:49.180 に答える