
|
xss防御: 1、尽量少将域名的domain设为域名的根下面,减少分站xss漏洞对主站的影响;+ N. R9 r& r+ F$ g [: g5 A* P' M
2、对输入的数据进行过滤检查:7 d1 @+ O& K( m6 E8 ^
public static String htmlSpecialChars(final String s) {
3 I4 _ d: B/ |6 sString result = s;; E2 g7 p" e6 ^& [& Q) {7 q: v
result = regexReplace("&", "&", result);7 r% E/ Q( [/ E' }1 X- q
result = regexReplace(""", """, result);
3 A+ o. ~ x k9 Zresult = regexReplace("<", "<", result);5 W0 X) h3 h+ L6 S6 V4 T# y
result = regexReplace(">", ">", result);
. X' g$ e+ O6 [ Freturn result;
3 F) x- N3 v C/ w4 e7 J}; F2 j' E. S( A8 H$ y, C4 v
注意:CSS的行为方式也会有JavaScript的执行:
) f* s# l4 }' o" _' u- |/ W6 g" ^# r' j
#content { height: expression_r(alert('test xss') ); }( r2 \" l+ z J- r8 y) L
0 K4 [8 V/ h7 {/ O' H) c w7 g& a如果要支持html可以使用这个过滤器(附件,开源的)/ B- P8 z! s1 x2 V3 m+ l0 U1 h
例子3 G( u; j% o# a8 N- T% t& V
{- P' ^9 |4 D) f0 x# L
final ArrayList span_atts = new ArrayList();
7 ]4 ?4 p+ ^3 [5 ]1 ?Map allowedAttrValues = new HashMap();
1 a0 V. O) x$ Z4 R* T5 lallowedAttrValues.put(“color”, Pattern.compile(“(#([0-9a-fA-F]{6}|[0-9a-fA-F]{3}))”));
: w8 ~+ \4 i7 f! m `allowedAttrValues.put(“font-weight”, Pattern.compile(“bold”)); S( y" `9 \' p$ w
allowedAttrValues.put(“text-align”, Pattern.compile(“(center|right|justify)”));
, j* S) x' x3 t. |, G1 Y# ]1 `, NallowedAttrValues.put(“font-style”, Pattern.compile(“italic”));1 J8 O! ~; \1 I n7 v! R- _5 F
allowedAttrValues.put(“text-decoration”, Pattern.compile(“underline”));4 J6 Z1 \ N& S
allowedAttrValues.put(“margin-left”, Pattern.compile(“[0-9]+px”));
( F6 a- l0 \5 r0 }: kallowedAttrValues.put(“text-align”, Pattern.compile(“center”));
) Z, C5 |6 p1 t+ g7 V$ zspan_atts.add(new Attribute(“style”, allowedAttrValues));5 T1 X0 J% P7 {! u# g& w
vAllowed.put(“span”, span_atts);! u U( \5 u) g
}
- {3 e5 v4 \% i) Q+ j{
4 |4 P( e6 V+ ]0 M3 Z7 Zfinal ArrayList div_atts = new ArrayList();: x; w( d* E0 j* I: J+ S5 J
div_atts.add(new Attribute(“class”));
; ~. T$ s$ \; F8 t" T4 @div_atts.add(new Attribute(“align”));/ }4 D: \5 i7 L# N+ g! t
vAllowed.put(“div”, div_atts);
, l8 N3 o, K8 T* U% R3 W, ?}% z, T, u+ ]6 S' {/ ?" ^
* 2. 调用类似这样的函数String outHtml = HetaoBlogXssHTMLFilter.filter(sourceHtmlString);
1 [3 u+ t i# Z. E$ g7 s! T7 P3、针对图片的上传需要检测是否是正确的图片格式是否是伪格式,图片服务器尽量不开启程序(java,php,.net)功能或对图片格式不做程序解析;
# _7 `8 R* o5 m; g& m" c防御CSRF:9 J( Y" g5 A0 u2 {* O$ j
在Web应用程序侧防御CSRF漏洞,一般都是利用referer判断输入端的url来源、或使用token或者使用JavaScript看不见的验证码;( C& O; G8 n3 m% [) Z. \2 h
|
|