站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题求JSP论坛中过滤敏感字符的类(来者有分)

求JSP论坛中过滤敏感字符的类(来者有分)

摘要: 求JSP论坛中过滤敏感字符的类(来者有分)


我做一论坛,因怕别人在论坛中发表一些含有政治和色情的东西,所以想加一个过滤器,当提交帖子时发现有这些敏感字那么就提示用户返回重填.不知道这个怎么写?高手们帮忙!!
另外偶还想求一个防止SQL注入的过滤类,过滤掉URL中的不正确字符,这两个过滤器知道其中之一的请帮忙!!!!!!!!!!!!!!!!!


用servet的Filter技术,它可以起到过滤作用,你仔细看看吧,我也没有搞过这个


帮定,以前做过ASP的,用的是枫叶防注程序,不知道有没有Java版的哈。


字符川判断吧 不过好象不是很有用
别人可以 拆打 汉字拼音混打 中间+横线。。。。


支持


没有帮我吗?





帮顶


找一个比较全面的FITER就可以了。。网上似乎有这样代码。搜索下



正则


我用了FILTER,但却导致了很多其它问题,郁闷中....


up


用servet的Filter技术可以


接分





UP


content2//就是提交的内容

public static final String filter="代开发票|第六世纪|我叫小刘";//要过虑的字符,用|分隔
java.util.regex.Matcher m=java.util.regex.Pattern.compile(filter).matcher(content2);
if(m.find())
{
out.println("内容中含用非法字符(不文明用语,广告,政治话题或特殊符号).");
return;
}


真的很好的问题



不好实现吧,人家要是输入的时候加点别的符号比如下划线,横杠什么的你那个就很难判断了吧。


支持


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
String tmp = request.getParameter("fieldName");
if(tmp.contains("色情文字"))
response.sendRedirect("rewrite.jsp");
chain.doFilter(request,response);
}


嗯,可以用servlet和正则表达式来做,
你可以判断所输入的字符中是否包括有一些非法的字符,
如果有的话,你可以通过过滤器将它过滤掉!
或者要求它重新填写!


看了大家的见解,感觉过滤可以,但就是如果用户在词中加有空格/引号/标点之类的东西,估计就无能为力了吧,你一些大网站他们是怎么做的呢
我的问题还在郁闷中!!!!!!!!!!!!!!!!!!!!!!!


很难搞的 很多中间都有字符分割的


用正则!!!
包在 java.util.regex
但是java要在"/"和"(" ")" 前面都要再加上个反斜杠
eg: (/d{3})/s/d{3}-/d{4}
in java: //(//d{3}//)//s//d{3}-//d{4}


使用过滤器


把危险的字符都替换掉


我当然知道要过滤字符,有谁写过这个东西吗?共享一下!


竭尽全力全力再顶最后一下!!!!!!!!!!!!!!!!!


帮你顶!
我的帖子是http://community.csdn.net/Expert/TopicView3.asp?id=4835599
有些热心高手回了帖,你可看看



用正则表达式和FILTER共同来做
我也不知道怎么做哎
顶一下


帮顶!


过滤器是一定要用的,但主要还是在你怎么处理非法字符
可以研究一下正则表达式,楼主的两个问题都是和字符串处理相关的,应该都可以用正则表达式解决


学习...


UP


在等一下


帮顶一下,静待解决方法,拿分又长知识,呵呵....


up


我做博客的时候也遇到过敏感字过滤问题,
最好的解决方法就是用正则表达式:
基本写法:
string句子,s敏感的字,str把敏感字过滤成*

Patter p=Patter.complic(string);
Matcher m=p.math(s);
str=m.replaceAll("*");


百分百屏蔽是不可能的。。

人家要是输入的时候加点别的符号比如下划线,横杠什么的你那个就很难判断了吧。

能达到这种情况就不错了。。


盖个章!!


顶!


来者有分


public class RemoveText {

public static String[] getStringData(String str, String sign) {
String[] strData = null;
StringTokenizer st1 = new StringTokenizer(str, sign);
strData = new String[st1.countTokens()];
int i = 0;
while (st1.hasMoreTokens()) {
strData[i] = st1.nextToken().trim();
i++;
}
return strData;
}

public static boolean isBadwords(String str){
boolean result = false;
str = str.toUpperCase();
String badwords = ""混蛋|手机|广告";
String[] data = getStringData(badwords,"|");
int j = 0;
for(int i=0;i int dot = str.indexOf(data[i]);
if(dot!=-1){
result = true;
return result;
}
}
return result;
}
public static void main(String[] args) {
String str = "手机";
boolean is = isBadwords(str);
System.out.println(is); //返回 false 表示含有不良词语
}
}




谢谢koma_wind()


帮顶一下,静待解决方法,拿分又长知识,呵呵....这个我也要用啊



现在这个问题基本上已解决,但还存在一个问题就是,如果用户在敏感字中间加什么符号之类的,那就又没辙了!!!!


不解决,不结帖,再顶



没有很完善的办法

iwlk(第六世纪 http://down.c06.net) 的已经可以了


好啊


UP


用SERVLET中的Filter类可以实现过滤。


给你一个全程吧!!

public void doFilter(ServletRequest request, ServletResponse response
8.      , FilterChain filterChain)
9.  {
10.  try
11.  {
12.   //进行请求和响应的类型转换
13.   HttpServletRequest httpRequest = (HttpServletRequest) request;
14.   HttpServletResponse httpResponse = (HttpServletResponse) response;
15.
16.   boolean isValid = true;
17.   String uriStr = httpRequest.getRequestURI().toUpperCase();
18.   if (uriStr.indexOf("LOGIN.JSP") == -1 &&
19.     uriStr.indexOf("SWITCH.JSP") == -1 &&
20.     httpRequest.getSession().getAttribute("ses_userBean") == null)
21.   {
22.    isValid = false;
23.   }
24.   if (isValid)
25.   {
26.    filterChain.doFilter(request, response);
27.   } else
28.   {
29.    httpResponse.sendRedirect("/webModule/login.jsp");
30.   }
31.
32.  } catch (ServletException sx)
33.  {
34.   filterConfig.getServletContext().log(sx.getMessage());
35.  } catch (IOException iox)
36.  {
37.   filterConfig.getServletContext().log(iox.getMessage());
38.  }
39. }



字符串截取


这是什么呢?这是过滤网页及字码乱码改正的,不符合题意.


JF


帮顶


<%!
public String strReplace(String str)
{
String replaceChr="%";
String dChr="%25";
String hasReplaced="";
boolean toReplace=true;
while(toReplace)
{
if(toReplace)
{
while(str.indexOf(replaceChr)!=-1)
{
hasReplaced+=str.substring(0,str.indexOf(replaceChr))+dChr;
str=str.substring(str.indexOf(replaceChr)+1,str.length());

}
hasReplaced+=str;
str=hasReplaced;
hasReplaced="";
}
if(str.indexOf("//")!=-1)
{ replaceChr="//";
dChr="%5C%5C";
continue;
}
if(str.indexOf("/"")!=-1)
{ replaceChr="/"";
dChr="%5C%22";
continue;
}
if(str.indexOf("=")!=-1)
{ replaceChr="=";
dChr="%3D";
continue;
}
if(str.indexOf("+")!=-1)
{ replaceChr="+";
dChr="%2B";
continue;
}
if(str.indexOf("/")!=-1)
{ replaceChr="/";
dChr="%2F";
continue;
}
if(str.indexOf("?")!=-1)
{ replaceChr="?";
dChr="%3F";
continue;
}
if(str.indexOf("#")!=-1)
{ replaceChr="#";
dChr="%23";
continue;
}
if(str.indexOf("&")!=-1)
{ replaceChr="&";
dChr="&";
continue;
}
toReplace=false;
}
return str;
}
public int strReplace(int i)
{return i;
}
public float strReplace(float f)
{return f;
}
%>



d


要完全过虑是不可能的。
人家要是在词语里插入其他符号或者文字你就很难过虑。用正则也不行,你怎么知道人家在字符之间插入几个符号?如果用通配的话,弄不好就过虑错了。何况人家还会用别字。人看了能明白,计算机怎么明白?
如:
%法※%'轮""""功""
江哲民


说的有道理,那要是这样说的话,岂不是过滤的作用不大了?


说的有道理,那要是这样说的话,岂不是过滤的意义不大了?


DDDDDDDDDDDDDDDDDDDDDDDDdd


用正则表达式过滤


ding


帮你顶



UP


正则


顶 !!!!!


用正则表达式过滤字符,比如除了汉字留下,其他全部虑掉等,然后在判断


很好的话题,支持继续讨论下去


我遇到同样的问题,期待答案。


ddd


up



d


用正则表达式过滤字符,比如除了汉字留下,其他全部虑掉等,然后在判断


同意这个


另外还需要有敏感词语或句子的字典, 逐一比较


所以说咱们中国的程序员就是累。


up


你可以定义一个.txt文件,把你要过滤的字都写在里面,就用下面的程序过滤就可以了.
public void init(FilterConfig filterConfig)
throws ServletException{
try{
//读取敏感字列表
File f=new File("../webapps/bbs/web-inf/words.txt");
BufferedReader br=new BufferedReader(new FileReader(f));
int count=6;
sub=new String[count];
for(int i=0;i sub[i]=br.readLine();
}
}catch(IOException e){System.err.println(e);}
}
我只弄了一部分给你,写Servlet就可以了.


TXT文件里面的敏感字用什么隔开?


盖个章!!


顶上去



收藏~~`
帮忙DDDDDing


中间加什么符号之类的

谁有办法?我还不信了


越搞越糊涂!!!没辙!


写个敏感字的配置文件
再用正则表达式去匹配


不搞了,要源码?谁给?


/**
* 替换敏感字符为"***"
* @param s1 参数1,所有的敏感字符集,要求格式"贱人|白痴|哈哈"
* @param s2 参数2,要过滤的字符串
* @return 返回过滤后的字符串
*/
public String replace(String s1,String s2){
String result="";
result=s2.replaceAll(s1,"***");

return result;
}


接分


servet的Filter


我看了大家的意见,感觉可以,是不是不能100%的屏蔽,像在关键字中间加什么符号之类的?


对,不可能100%屏蔽的,你知道他要在中间加什么符号?


↑返回目录
前一篇: char型变量中能不能存贮一个中文汉字
后一篇: 各位大虾,为什么我的java小程序无法运行呢?