????????????java???

????B/S????????????校????????????????????????????????????????????????????????????????????????????????锌????????????????????????????????????????????????????????????????????????????????????????????????????????????

???????????

????1??????????械???Refresh/Reload/Back/Forward???????????Back??Submit?????????????reloading??????????

????2???????????????????????????????????????????????????????????????????(???????????)??

????3???霉?????泄??????

?????????纬??路??

????1????basic filter??????????

????if(true){//????1?????????????????

??????..

????chain.doFilter(request??response);

????}else{

????//????2???????????????????????????

????}

????2?????????????

????a?????????????/?????????

????b????js?????????????????????????????????????????卸?????????

????var flag=true;

????function checkForm(){

????if (flag==false){

????return;

????}

????flag=false;

????document.form1.submit();

????}

????c??struts (webwork?????????????)

????//????????????????????????session?斜?????????????input??????????????????

??????action?校?

????//

????if (!isTokenValid(request))

????errors.add(ActionErrors.GLOBAL_ERROR??

????new ActionError(“error.transaction.token”));

????resetToken(request); //???session?械?????

????action????????????????????????

????protected String generateToken(HttpServletRequest request) {

????HttpSession session = request.getSession();

????try {

????byte id[] = session.getId().getBytes();

????byte now[] =

????new Long(System.currentTimeMillis()).toString().getBytes();

????MessageDigest md = MessageDigest.getInstance(“MD5”);

????md.update(id);

????md.update(now);

????return (toHex(md.digest()));

????} catch (IllegalStateException e) {

????return (null);

????} catch (NoSuchAlgorithmException e) {

????return (null);

????}

????}

????d??????????????????????????????????????锌????????????????????????form???????????????????????????????????????????????????????????????????????????????????????form????????些??????????????????????些??????????????????????????servlet???????????????????????

??????????(Synchronizer (or Dvu) Token)

???????????????????????form???????????????????????????????Session?校???????????????????????form?小??? form???????form?械????????Session?械???????????????form???????????????????????????????????????????????form??????????????????????????????????form????????????????械??????????????????????form???????????????????

??????????妫�?????????????????????????????????????????????????????锟�?

??????????妫�?????????????????????????????????????????????????????锟�?Session?械??????????????渭??????????????form??

?????????????????????????????些??????????????????????????????????????????纾�??????????????????????A?????????校?????? A???????????B??C?????????????????????????????A?????????????????????????????????????????????????????????????????????????????????????????????

????e???????hidden???????????????????????????session??????卸?session??????

?????????????

????1????????????????????Form?????????????hidden???????????????page?????????卸??????????????????(?? struts????????);????????button?????????卸?(struts?泻??????)??????????????????????hidden text????????????????????

????2????basic filter?懈???????hidden text??卸????????????

????3??javascript???????????????????????????????卸??????????????????hidden text?????????????霉???????谩?