ホームページ  >  記事  >  ウェブフロントエンド  >  Jsoup_html/css_WEB-ITnose を使用したユーザー入力コンテンツの HTML セキュリティ フィルタリング

Jsoup_html/css_WEB-ITnose を使用したユーザー入力コンテンツの HTML セキュリティ フィルタリング

WBOY
WBOYオリジナル
2016-06-21 09:17:042399ブラウズ

ウェブサイト上のinputまたはtextareaを使用して、投稿、記事、コメントなどの投稿などのコンテンツを入力する機能をユーザーに提供します。現時点では、バックエンド プログラムは、セキュリティ リスクを引き起こす可能性のある 3f1c4e4b6b16bbbd69b2ee476dc4f83a タグなどの入力コンテンツに対してセキュリティ フィルタリングを実行する必要があります。

JavaにはJsoupという、HTMLやXML文書を解析するためのオープンソースパッケージがあり、jqueryに似たオプション構文が使えるのが特徴です。

最近、コンテンツセキュリティフィルタリングを解決するときに、Jsoupがカスタマイズされたホワイトリスト(セキュリティラベルホワイトリスト)を通じてそのような機能を提供していることをGoogleで発見しました。これは非常に使いやすいです。

簡単なデモンストレーションは次のとおりです:

//HTML cleanString unsafe = "<table><tr><td>1</td></tr></table>" +		"<img src='' alt='' />" +		"<p><a href='http://example.com/' onclick='stealCookies()'>Link</a>" +		"<object></object>" +		"<script>alert(1);</script>" +		"</p>";String safe = Jsoup.clean(unsafe, Whitelist.relaxed());System.out.println("safe: " + safe);

公式 API アドレス: http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html

発見されたソース:

http:// www.oschina .net/question/12_10232、これに基づいてカスタム ヘルプ クラスを作成しました:

package com.cssor.safety; import org.jsoup.Jsoup;import org.jsoup.helper.StringUtil;import org.jsoup.safety.Whitelist; public class ContentSafeFilter {	private final static Whitelist user_content_filter = Whitelist.relaxed();	static {		//增加可信标签到白名单		user_content_filter.addTags("embed","object","param","span","div");		//增加可信属性	user_content_filter.addAttributes(":all", "style", "class", "id", "name");		user_content_filter.addAttributes("object", "width", "height","classid","codebase");		user_content_filter.addAttributes("param", "name", "value");		user_content_filter.addAttributes("embed", "src","quality","width","height","allowFullScreen","allowScriptAccess","flashvars","name","type","pluginspage");	} 	/**	 * 对用户输入内容进行过滤	 * @param html	 * @return	 */	public static String filter(String html) {		if(StringUtil.isBlank(html)) return "";		return Jsoup.clean(html, user_content_filter);		//return filterScriptAndStyle(html);	} 	/**	 * 比较宽松的过滤,但是会过滤掉object,script, span,div等标签,适用于富文本编辑器内容或其他html内容	 * @param html	 * @return	 */	public static String relaxed(String html) {		return Jsoup.clean(html, Whitelist.relaxed());	} 	/**	 * 去掉所有标签,返回纯文字.适用于textarea,input	 * @param html	 * @return	 */	public static String pureText(String html) {		return Jsoup.clean(html, Whitelist.none());	} 	/**	 * @param args	 */	public static void main(String[] args) {		String unsafe = "<table><tr><td>1</td></tr></table>" +	"<img src='' alt='' />" +				"<p><a href='http://example.com/' onclick='stealCookies()'>Link</a>" +				"<object></object>" +				"<script>alert(1);</script>" +				"</p>";		String safe = ContentSafeFilter.filter(unsafe);		System.out.println("safe: " + safe);	} }

Jsoup は、603830de8905840faf0669d054dd1ad2src 属性が削除されてしまうので、それを回避する簡単な方法を考えました:

/** * 自定义对用户输入内容进行过滤的标签 * @param html * @return */public static String filter(String html) {    if(StringUtil.isBlank(html)) return "";    String baseUri = "http://baseuri";    return Jsoup.clean(html, baseUri, user_content_filter).replaceAll("src=\"http://baseuri", "src=\"");}

http://cssor.com/jsoup-whitelist-clean-html-for-user-content. html


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。