JavaEEÓÐһЩ³¬ÔÞµÄÄÚÖð²È«»úÖÆ£¬µ«ËüÃÇÔ¶Ô¶²»Äܸ²¸ÇÓ¦ÓóÌÐòÒªÃæÁÙµÄËùÓÐÍþв¡£ºÜ¶à³£¼û¹¥»÷£¬ÀýÈç¿çÕ¾µã½Å±¾¹¥»÷£¨XSS£©¡¢SQL×¢Èë¡¢
¿çÕ¾µãαÔìÇëÇó£¨CSRF£©£¬ÒÔ¼°XMLÍⲿʵÌ壨XXE£©Ë¿ºÁûÓк¸Ç¡£Äã¿ÉÒÔ×èÖ¹webÓ¦ÓóÌÐòºÍweb·þÎñ±©Â¶ÓÚÕâЩ¹¥»÷£¬µ«ÕâÐèÒªÒ»¶¨Á¿µÄ¹¤×÷ºÍ
²âÊÔ¡£ÐÒÔ˵ÄÊÇ£¬Open Web Application Security Project£¨OWASP£©¹«²¼ÁË¡°10´ó×î¹Ø¼üµÄwebÓ¦ÓóÌÐò°²È«·çÏÕ¡±µÄ±¨¸æ¡£

ÈÃÎÒÃÇÀ´¿´¿´ÕâЩ¹Ø¼üµÄ·çÏÕÈçºÎÓ¦ÓÃÓÚJavaEEµÄwebÓ¦ÓóÌÐòºÍweb·þÎñ£º
1.×¢Èë
×¢Èë·¢ÉúÔÚ¿ª·¢ÈËÔ±»ñÈ¡²»¿ÉÐŵÄÐÅÏ¢£¬ÀýÈçrequest.getParameter£¨£©£¬request.getCookie£¨£©£¬»ò
request.getHeader£¨£©£¬²¢ÔÚÃüÁî½Ó¿ÚÖÐʹÓÃËüµÄÈκÎʱºò¡£ÀýÈ磬SQL×¢ÈëÔÚÄãÁ¬½Ó²»¿ÉÐŵÄÊý¾Ýµ½³£¹æSQL²éѯ£¬Èç¡°SELECT
* FROM users WHERE username=¡®¡° + request.getParameter(¡°user¡±)
+ ¡°¡® AND password=¡®¡° + request.getParameter(¡°pass¡±)
= ¡°¡®¡°Ê±·¢Éú¡£¿ª·¢ÈËÔ±Ó¦¸ÃʹÓÃPreparedStatementÀ´·ÀÖ¹¹¥»÷Õ߸ıä²éѯµÄº¬ÒåºÍ½Ó¹ÜÊý¾Ý¿âÖ÷»ú¡£»¹ÓÐÐí¶àÆäËûÀàÐ͵Ä×¢È룬Èç
Command×¢Èë¡¢LDAP×¢ÈëÒÔ¼°Expression Language (EL) ×¢È룬ËùÓÐÕâЩ¶¼¼«¶ÈΣÏÕ£¬Òò´ËÔÚ·¢ËÍÊý¾Ýµ½ÕâЩ½âÊÍÆ÷µÄʱºòÒª¸ñÍâСÐÄ¡£
2.Ë𻵵ÄÑéÖ¤ºÍ»á»°¹ÜÀí
JavaEEÖ§³ÖÉí·ÝÑéÖ¤ºÍ»á»°¹ÜÀí£¬µ«ÕâÀïÓкܶàÈÝÒ׳ö´íµÄµØ·½¡£Äã±ØÐëÈ·±£ËùÓо¹ýÑéÖ¤Á÷Á¿¶¼Í¨¹ýSSL£¬Ã»ÓÐÀýÍâ¡£Èç¹ûÄãÔø¾±©Â¶
JSESSIONID£¬ÄÇôËü¾Í¿É±»ÓÃÀ´ÔÚÄã²»ÖªÇéµÄÇé¿öϽٳÖÓû§»á»°¡£ÄãÓ¦¸ÃÐýתJSESSIONID£¬ÔÚÓû§½øÐÐÉí·ÝÑéÖ¤ÒÔ·ÀÖ¹»á»°¹Ì¶¨¹¥»÷
£¨Session Fixation attack£©µÄʱºò¡£ÄãÓ¦¸Ã±ÜÃâʹÓÃresponse.encodeURL£¨£©£¬ÒòΪËü»áÌí¼ÓÓû§µÄJSESSIONIDµ½URL£¬Ê¹µÃ¸üÈÝÒ×±»Åû¶»ò
±»µÁ¡£
3.¿çÕ¾µã½Å±¾¹¥»÷£¨XSS£©
XSS·¢ÉúÔÚµ±JavaEE¿ª·¢ÈËÔ±´ÓHTTPÇëÇó»ñÈ¡²»¿ÉÐŵÄÐÅÏ¢£¬²¢°ÑËü·Åµ½HTTPÏìÓ¦ÖУ¬¶øÃ»ÓÐÊʵ±µÄÉÏÏÂÎÄÊä³ö±àÂëµÄʱºò¡£¹¥»÷Õß¿ÉÒÔÀû
ÓÃÕâ¸öÐÐΪ½«ËûÃǵĽű¾×¢ÈëÍøÕ¾£¬È»ºóÔÚÕâ¸öÍøÕ¾ÉϽٳֻỰºÍÇÔÈ¡Êý¾Ý¡£ÎªÁË·ÀÖ¹ÕâЩ¹¥»÷£¬¿ª·¢ÈËÔ±ÐèÒªÖ´ÐÐÃô¸ÐµÄÉÏÏÂÎÄÊä³ö±àÂë¡£Èç¹ûÄã°ÑÊý¾Ýת»»³É
HTML£¬Ê¹ÓÃ&#xx;¸ñʽ¡£ÇëÎñ±ØÀ¨ºÅHTMLÊôÐÔ£¬ÒòΪÓкܶ಻ͬ×Ö·û¶ø²»´øÀ¨ºÅµÄÊôÐԻᱻÖÕÖ¹¡£Èç¹ûÄã°Ñ²»¿ÉÐŵÄÊý¾Ý·Åµ½
JavaScript£¬URL»òCSSÖУ¬ÄÇô¶ÔÓÚÿһ¸öÄã¶¼Ó¦¸ÃʹÓÃÏàÓ¦µÄתÒå·½·¨¡£²¢ÇÒÔÚºÍǶÌ×ÉÏÏÂÎÄ£¬ÈçÒ»¸öÓÃJavascriptдµÄÔÚHTML
ÊôÐÔÖеÄURL´ò½»µÀʱ£¬Òª·Ç³£Ð¡ÐÄ¡£Äã¿ÉÄÜ»áÏëÒª±àÂë¿â£¬ÀýÈçOWASP ESAPIµÄ°ïÖú¡£
4.²»°²È«µÄÖ±½Ó¶ÔÏóÒýÓÃ
ÈκÎʱºòÓ¦ÓóÌÐò±©Â¶ÁËÒ»¸öÄÚ²¿±êʶ·û£¬ÀýÈçÊý¾Ý¿âÃÜÔ¿£¬ÎļþÃû£¬»òhashmapË÷Òý£¬¹¥»÷Õ߾ͿÉÒÔ³¢ÊÔ²Ù×ÝÕâЩ±êʶ·ûÀ´·ÃÎÊδ¾ÊÚȨµÄÊý¾Ý¡£Àý
È磬Èç¹ûÄ㽫À´×ÔÓÚHTTPÇëÇóµÄ²»¿ÉÐŵÄÊý¾Ý´«µÝµ½JavaÎļþ¹¹ÔìÆ÷£¬¹¥»÷Õ߾ͿÉÒÔÀûÓá°../¡±»ò¿Õ×Ö½Ú¹¥»÷À´ÆÛÆÄãµÄÑéÖ¤¡£ÄãÓ¦¸Ã¿¼ÂǶÔÄãµÄÊý¾Ý
ʹÓüä½ÓÒýÓã¬ÒÔ·ÀÖ¹ÕâÖÖÀàÐ͵Ĺ¥»÷¡£ESAPI¿âÖ§³Ö´Ù½øÕâÖÖ¼ä½ÓÒýÓõÄReferenceMaps¡£
5.´íÎóµÄ°²È«ÅäÖÃ
ÏÖ´úµÄJavaEEÓ¦ÓóÌÐòºÍ¿ò¼Ü£¬ÀýÈçStrutsºÍSpringÖÐÓÐ×Å´óÁ¿µÄ°²È«ÉèÖá£È·¶¨ÄãÒѾä¯ÀÀ¹ýÕâЩ°²È«ÉèÖ㬲¢°´ÄãÏëÒªµÄÄÇÑùÉèÖá£
ÀýÈ磬СÐÄ<security-constraint>ÖеÄ<http-method>±êÇ©¡£Õâ±íÃ÷°²È«Ô¼Êø½öÊÊÓÃÓÚÁгöµÄ·½
·¨£¬ÔÊÐí¹¥»÷ÕßʹÓÃÆäËûHTTP·½·¨£¬ÈçHEADºÍPUT£¬À´ÈƹýÕû¸ö°²È«Ô¼Êø¡£Ò²ÐíÄãÓ¦¸Ãɾ³ýweb.xmlÖеÄ<http-
method>±êÇ©¡£
6.Ãô¸ÐÊý¾Ý±©Â¶
JavaÓдóÁ¿µÄ¼ÓÃܿ⣬µ«ËüÃDz»ÈÝÒ×ÕýȷʹÓá£ÄãÓ¦¸ÃÕÒµ½Ò»¸ö½¨Á¢ÔÚJCE»ù´¡ÉϵĿ⣬²¢ÇÒËüÄܹ»·½±ã¡¢°²È«µØÌṩÓÐÓõļÓÃÜ·½·¨¡£±ÈÈç
JasyptºÍESAPI¾ÍÊÇÕâÑùµÄ¿â¡£ÄãÓ¦¸ÃʹÓÃÇ¿´óµÄËã·¨£¬ÈçAESÓÃÓÚ¼ÓÃÜ£¬ÒÔ¼°SHA256ÓÃÓÚhashes¡£µ«ÊÇҪСÐÄÃÜÂëhashes£¬ÒòΪ
ËüÃÇ¿ÉÒÔÀûÓÃRainbow Table±»½âÃÜ£¬ËùÒÔҪʹÓÃ×ÔÊÊÓ¦Ëã·¨£¬Èçbcrypt»òPBKDF2¡£
7.ȱÉÙ¹¦Äܼ¶·ÃÎÊ¿ØÖÆ
JavaEEÖ§³ÖÉùÃ÷ʽºÍ³ÌÐòʽµÄ·ÃÎÊ¿ØÖÆ£¬µ«ºÜ¶àÓ¦ÓóÌÐòÈÔÈ»»áÑ¡Ôñ´´ÔìËüÃÇ×Ô¼ºµÄ·½°¸¡£ÏñSpring¿ò¼ÜÒ²ÓлùÓÚ×¢Ê͵ķÃÎÊ¿ØÖÆ»ùÔª¡£×îÖØÒª
µÄÊÂÇéÊÇҪȷ±£Ã¿Ò»¸ö±©Â¶µÄ¶Ë¿Ú¶¼ÒªÓÐÊʵ±µÄ·ÃÎÊ¿ØÖƼì²é£¬°üÀ¨web·þÎñ¡£²»ÒªÒÔΪ¿Í»§¶Ë¿ÉÒÔ¿ØÖÆÈκζ«Î÷£¬ÒòΪ¹¥»÷Õß»áÖ±½Ó·ÃÎÊÄãµÄ¶Ëµã¡£
8.¿çÕ¾µãαÔìÇëÇó£¨CSRF£©
ÿ¸ö¸Ä±ä״̬µÄ¶ËµãÐèÒªÑéÖ¤ÇëÇóÓÐûÓб»Î±Ôì¡£¿ª·¢ÈËÔ±Ó¦¸ÃÔÚÿ¸öÓû§µÄ»á»°ÖзÅÈëËæ»úÁîÅÆ£¬È»ºóµ±ÇëÇóµ½´ïµÄʱºòÑéÖ¤Ëü¡£·ñÔò£¬¹¥»÷Õ߾ͿÉÒÔͨ¹ý
Á´½Óµ½Î´Êܱ£»¤µÄÓ¦ÓóÌÐòµÄ¶ñÒâIMG£¬SCRIPT, FRAME»òFORM±êÇ©µÈ´´½¨¡°¹¥»÷¡±Ò³Ãæ¡£µ±Êܺ¦Õßä¯ÀÀÕâÖÖÒ³ÃæÊ±£¬ä¯ÀÀÆ÷»áÉú³ÉÒ»¸ö¡°Î±Ô족µÄHTTPÇëÇóµ½URLÔÚ±êÇ©Öб»Ö¸¶¨µÄÈκÎÄÚÈÝ£¬²¢ÇÒ
×Ô¶¯°üÀ¨Êܺ¦È˵ÄÈÏÖ¤ÐÅÏ¢¡£
9.ʹÓôøÓÐÒÑ֪©¶´µÄ×é¼þ
ÏÖ´úµÄJavaEEÓ¦ÓóÌÐòÓÐÊý°Ù¸ö¿â¡£ÒÀÀµÐÔ½âÎö¹¤¾ß£¬ÈçMaven£¬µ¼ÖÂÁËÕâ¸öÊý×ÖÔÚ¹ýÈ¥ÎåÄêʱ¼äÀï³öÏÖ±¬Õ¨Ê½Ôö³¤¡£Ðí¶à¹ã·ºÊ¹ÓõÄJava¿â
¶¼ÓÐһЩÒÑÖªµÄ©¶´£¬»áÈÃwebÓ¦ÓóÌÐò±»ÍêÈ«µß¸²¡£½â¾öµÄ°ì·¨ÊǼ°Ê±¸üп⡣²»ÒªÖ»ÔËÐе¥Ò»É¨Ã裬ÒòΪеĩ¶´Ã¿Ìì¶¼ÔÚ·¢²¼¡£
10.δ¾ÑéÖ¤µÄתַºÍתËÍ
ÈκÎʱºòÄãµÄÓ¦ÓóÌÐòʹÓò»¿ÉÐŵÄÊý¾Ý£¬ÀýÈçrequest.getParameter£¨£©»òrequest.getCookie£¨£©£¬ÔÚµ÷ÓÃ
response.sendRedirect£¨£©Ê±£¬¹¥»÷Õß¿ÉÒÔÇ¿ÖÆÊܺ¦ÕßµÄä¯ÀÀÆ÷תµ½Ò»¸ö²»ÊÜÐÅÈεÄÍøÕ¾£¬Ä¿µÄÔÚÓÚ°²×°¶ñÒâÈí¼þ¡£forwardÒ²´æÔÚ
×ÅÀàËÆµÄÎÊÌ⣬²»Í¬Ö®´¦ÔÚÓÚ¹¥»÷Õß¿ÉÒÔתËÍËûÃÇ×Ô¼ºµ½Î´¾ÊÚȨµÄ¹¦ÄÜ£¬Èç¹ÜÀíÒ³Ãæ¡£Ò»¶¨Òª×ÐϸÑé֤תַºÍתËÍÄ¿±ê¡£
ÄãÓ¦¸Ã³ÖÐøÁôÒâÕâЩÎÊÌâ¡£ÐµĹ¥»÷ºÍ©¶´×ÜÊÇÔÚ±»·¢ÏÖ¡£ÀíÏëÇé¿öÏ£¬Äã¿ÉÒÔ¼¯³É°²È«¼ì²éµ½ÏÖÓеĹ¹½¨¡¢²âÊԺͲ¿Êð¹ý³Ì¡£
ÒªÔÚÓ¦ÓóÌÐòÖмì²éÕâЩÎÊÌ⣬¿ÉÒÔ³¢ÊÔÃâ·ÑµÄContrast for Eclipse²å¼þ ¡£Õâ²»ÊÇÒ»¸ö¼òµ¥µÄ¾²Ì¬·ÖÎö¹¤¾ß¡£Ïà·´£¬C4EÀûÓÃJavaÒÇ±í»¯API£¬À´¼àÊÓÓ¦ÓóÌÐòÖÐÓ밲ȫÏà¹ØµÄÒ»ÇС£
C4EÉõÖÁÄÜʵʱµØ×öµ½ÍêÕûµÄÊý¾ÝÁ÷·ÖÎö£¬Òò´ËËü¿ÉÒÔ¸ú×ÙÀ´×ÔÓÚÇëÇóµÄÊý¾Ý£¬Í¨¹ýÒ»¸ö¸´ÔÓµÄÓ¦ÓóÌÐò¡£ÀýÈ磬¼ÙÉèÄãµÄ´úÂë»ñÈ¡ÁËÒ»¸ö²ÎÊýÖµ£¬ÓÃ
base64½âÂëËü£¬ÔÙ´æ´¢ÓÚmapÖУ¬°Ñmap·Åµ½Êý¾ÝbeanÖУ¬ÔÙ½«bean´æ´¢µ½Ò»¸ö»á»°ÊôÐÔÖУ¬ÔÚJSPÖлñÈ¡beanµÄÖµ£¬²¢Ê¹ÓÃEL½«Õâ¸ö
Öµ²åÈëµ½ÍøÒ³¡£Contrast for Eclipse¿ÉÒÔ¸ú×ÙÕâЩÊý¾Ý²¢±¨¸æXSS©¶´¡£ÄÄÅÂÄãÕýÔÚʹÓõÄÊǸ´ÔӵĿò¼ÜºÍ¿â¡£Ã»ÓÐÆäËû¹¤¾ßÄÜÔÚËÙ¶È£¬¾«¶ÈºÍÒ×ÓÃÐÔ·½ÃæÓëÖ®æÇÃÀ¡£
Äã¿ÉÒÔÔÚEclipse MarketplaceÕÒµ½Contrast for Eclipse¡£È»ºó£¬Ö»Ðèתµ½·þÎñÆ÷Ñ¡Ï¡°Start
with Contrast¡±¡ª¡ªÊ£Ïµľͽ»¸øËü°ì°É¡£
|