java 跨站点脚本编制_AppScan跨站点脚本编制修复
查了下百度,跨站點腳本編制其實也就是在url后加入?yún)?shù)和js腳本實現(xiàn)一些壞壞的事情,至少appscan就是這么干的。
那么主要的工作就是把惡意代碼給過濾了,作為javaweb開發(fā),明顯第一步想到的是過濾器。
網(wǎng)上很多都是將request對象 傳入HttpServletRequestWrapper的子類 ,主要是將獲取信息的方法過濾了一下,主要有:getParameterValues,getParameterValues,getParameter這幾個方法。也就是每次用request.getParameter("??")這些個方法時,會第一時間先過濾一遍惡意代碼。
然而!!!我按照appscan 的檢測url 再輸了一次 還是會執(zhí)行js腳本,原因在它傳的參數(shù)我后臺根本沒有,也就是 不會用getParamter方法來過濾一遍!
所以還是要將所有的parameterName循環(huán)一遍 把他們帶的參數(shù)給干掉!
public class NoHostFilter implements Filter {
public static Logger log = LoggerFactory.getLogger(NoHostFilter.class);
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
MyServletRequest req = new MyServletRequest((HttpServletRequest) request);
HttpServletResponse response = (HttpServletResponse) res;
// 獲取請求所有參數(shù),校驗防止腳本注入,防止XSS漏洞
String url = req.getRequestURI();
Enumeration> params = req.getParameterNames();
String paramN = null;
while (params.hasMoreElements()) {
paramN = (String) params.nextElement();
String paramVale = req.getParameter(paramN);
if (!paramN.toLowerCase().contains("password")) {
log.info("傳參為:" + paramN + "==" + paramVale);
}
// 校驗是否存在SQL注入信息
if (checkSQLInject(paramVale, url)) {
response.sendRedirect(req.getContextPath() + "/error/406.jsp");
}
}
chain.doFilter(req, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
private String xssEncode(String s) {
if (s == null || s.isEmpty()) {
return s;
}
StringBuilder sb = new StringBuilder(s.length() + 16);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '>':
sb.append('>');// 全角大于號
break;
case '
sb.append('<');// 全角小于號
break;
case '\'':
sb.append('‘');// 全角單引號
break;
case '\"':
sb.append('“');// 全角雙引號
break;
case '&':
sb.append('&');// 全角
break;
case '\\':
sb.append('\');// 全角斜線
break;
case '#':
sb.append('#');// 全角井號
break;
case '(':
sb.append('(');//
break;
case ')':
sb.append(')');//
break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
/**
*
* 檢查是否存在非法字符,防止js腳本注入
*
* @param str
* 被檢查的字符串
* @return ture-字符串中存在非法字符,false-不存在非法字符
*/
public boolean checkSQLInject(String str, String url) {
if (StringUtils.isEmpty(str)) {
return false;// 如果傳入空串則認(rèn)為不存在非法字符
}
// 判斷黑名單
String[] inj_stra = { "script", "mid", "master", "truncate", "insert", "select", "delete", "update", "declare",
"iframe", "'", "onreadystatechange", "alert", "atestu", "xss", ";", "'", "\"", "", "(", ")", ",",
"\\", "svg", "confirm", "prompt", "onload", "onmouseover", "onfocus", "onerror" };
str = str.toLowerCase(); // sql不區(qū)分大小寫
for (int i = 0; i < inj_stra.length; i++) {
if (str.indexOf(inj_stra[i]) >= 0) {
return true;
}
}
return false;
}
}
轉(zhuǎn)載至鏈接:https://my.oschina.net/xlpapapa/blog/1636141
總結(jié)
以上是生活随笔為你收集整理的java 跨站点脚本编制_AppScan跨站点脚本编制修复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝抖音快手微博集福终极攻略 别错过任
- 下一篇: 投资一千万元!滴滴关联公司成立全新能源科