留言板 用字典检测非法内容并且禁止IP 带详细介绍
2008-11-19 10:23
344 查看
一.注意事项:
1.本人原创于http://blog.csdn.net/textonly/,转载请注明出处
2.本人系初学者,本代码优化方面可能不够
二.功能简介:
1.用外接字典,对用户提交的内容进行检测,发现违禁内容则提示,连续同个IP提交3次违禁内容则对该IP禁言,禁言一天,当下一个用户提交的时候,系统会检测数据库里一天前的违禁内容并予以删除。
2.可用于留言板,评论等等游客提交等多处地方,并且可发展违禁IP后台管理等等扩展功能。
3.本代码带详细介绍,方便初学者,如有疑问,请留言
4.采用正则表达式来过滤查找内容,别忘记 using System.Text.RegularExpressions; 了。。。
三.系统环境:
ASP.NET C#
SQL 2005
四.数据库设计:
表名 banuser
键值
banid int
bantime datetime
bancontent varchar
banip varchar
bancount int
五.代码部分:
private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e) //按钮提交事件
{
SqlConnection ACconn=db.createconnection();
ACconn.Open(); //打开数据库链接
string ip =System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; //获取用户当前IP
string addtime=System.DateTime.Now.ToString();
///
///释放昨日的数据
///
SqlCommand del = ACconn.CreateCommand();
del.CommandText = "delete from banuser where datediff(d,bantime,GetDate())>1 and bancount<8";
del.ExecuteNonQuery();
///
///验证码核对
///
string strValidate = Jhtyj.Common.StringHelper.StringFormat.InputText(tbxValidate.Text,4);
if((string)Session["VNum"] != strValidate.ToUpper())
{
rfvValidate.ErrorMessage = "验证码错误";
rfvValidate.IsValid = false;
return;
}
///
/// 关键词过滤
///
FileStream fs = new FileStream(Server.MapPath(".")+"//zangs.txt",FileMode.Open,FileAccess.Read); //读取文件
StreamReader sr = new StreamReader(fs,System.Text.Encoding.GetEncoding("GB2312"));
string[] words= sr.ReadToEnd().Split('|'); //排除分隔符
bool find = false;
string sPattern = this.content.Text;//content代表提交的内容
foreach (string s in words)//对于每一个违禁内容关键字进行循环
{
if (System.Text.RegularExpressions.Regex.IsMatch(sPattern,s))//检测内容/忽略大小写
{
find = true;//找到了
break;
}
else
{
find = false;//没有找到
}
}
if (!find) //发现非法内容
{
///
///提交次数判定
///
SqlCommand cmd = ACconn.CreateCommand();
cmd.CommandText = "select count(*) from banuser where banip ='"+ip+"'";
int ips = Convert.ToInt32(cmd.ExecuteScalar());
if (ips > 0) //检查是否有存在IP
{
SqlCommand cmd1 = ACconn.CreateCommand();
cmd1.CommandText = "Select bancount from banuser where banip ='"+ip+"'";
int bancount = (int)cmd1.ExecuteScalar();
if (bancount > 2)//核对已经违规次数
{
Response.Write("<script>alert('您因为多次提交非法内容而被禁言中');</script>");
rfvValidate.IsValid = false;
return;
}
}
else
{
Response.Write ("");
}
}
else //没有发现非法内容
{
Response.Write("<script>alert('您所提交的内容中含有非法内容,请慎重');</script>");
try
{
///
///提交次数判定
///
SqlCommand cmd = ACconn.CreateCommand();
cmd.CommandText = "select count(*) from banuser where banip ='"+ip+"'";
int ips = Convert.ToInt32(cmd.ExecuteScalar());
if (ips > 0) //检查是否有存在IP
{
SqlCommand cmd1 = ACconn.CreateCommand();
cmd1.CommandText = "Select bancount from banuser where banip ='"+ip+"'";
int bancount = (int)cmd1.ExecuteScalar();
if (bancount > 2)//核对已经违规次数
{
Response.Write("<script>alert('您因为多次提交非法内容而被禁言中');</script>");
rfvValidate.IsValid = false;
return;
}
else //没有超过次数自动计数
{
string banusersql="update banuser set bancount=bancount+1 where banip ='"+ip+"'"; //计数器+1
SqlCommand ACc=new SqlCommand(banusersql,ACconn);
ACc.ExecuteNonQuery();
rfvValidate.IsValid = false;
return;
}
}
else //IP不存在的时候新加入违规IP
{
string sqll3="insert into banuser(bantime,bancontent,banip,bancount) values ('"+addtime+"','"+this.content.Text.ToString().Replace("/r/n","<br>")+"','"+ip+"','"+1+"')";
SqlCommand sql3=new SqlCommand(sqll3,ACconn);
sql3.ExecuteNonQuery();
rfvValidate.IsValid = false;
return;
}
}
catch(Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
ACconn.Close();
}
}
fs.Close();
sr.Close();
ACconn.Close();
if(this.IsValid)
{
//全部确认无误后进行下一步,例如插入留言数据等等
}
六.字典部分:
字典文件名为 zangs.txt 可以随便改,代码里有
字典结构为 哈哈|哈哈1|哈哈2
需要字典的请留下邮箱,该字典包含敏感词,脏话等等,收集加工于网上来源
1.本人原创于http://blog.csdn.net/textonly/,转载请注明出处
2.本人系初学者,本代码优化方面可能不够
二.功能简介:
1.用外接字典,对用户提交的内容进行检测,发现违禁内容则提示,连续同个IP提交3次违禁内容则对该IP禁言,禁言一天,当下一个用户提交的时候,系统会检测数据库里一天前的违禁内容并予以删除。
2.可用于留言板,评论等等游客提交等多处地方,并且可发展违禁IP后台管理等等扩展功能。
3.本代码带详细介绍,方便初学者,如有疑问,请留言
4.采用正则表达式来过滤查找内容,别忘记 using System.Text.RegularExpressions; 了。。。
三.系统环境:
ASP.NET C#
SQL 2005
四.数据库设计:
表名 banuser
键值
banid int
bantime datetime
bancontent varchar
banip varchar
bancount int
五.代码部分:
private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e) //按钮提交事件
{
SqlConnection ACconn=db.createconnection();
ACconn.Open(); //打开数据库链接
string ip =System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; //获取用户当前IP
string addtime=System.DateTime.Now.ToString();
///
///释放昨日的数据
///
SqlCommand del = ACconn.CreateCommand();
del.CommandText = "delete from banuser where datediff(d,bantime,GetDate())>1 and bancount<8";
del.ExecuteNonQuery();
///
///验证码核对
///
string strValidate = Jhtyj.Common.StringHelper.StringFormat.InputText(tbxValidate.Text,4);
if((string)Session["VNum"] != strValidate.ToUpper())
{
rfvValidate.ErrorMessage = "验证码错误";
rfvValidate.IsValid = false;
return;
}
///
/// 关键词过滤
///
FileStream fs = new FileStream(Server.MapPath(".")+"//zangs.txt",FileMode.Open,FileAccess.Read); //读取文件
StreamReader sr = new StreamReader(fs,System.Text.Encoding.GetEncoding("GB2312"));
string[] words= sr.ReadToEnd().Split('|'); //排除分隔符
bool find = false;
string sPattern = this.content.Text;//content代表提交的内容
foreach (string s in words)//对于每一个违禁内容关键字进行循环
{
if (System.Text.RegularExpressions.Regex.IsMatch(sPattern,s))//检测内容/忽略大小写
{
find = true;//找到了
break;
}
else
{
find = false;//没有找到
}
}
if (!find) //发现非法内容
{
///
///提交次数判定
///
SqlCommand cmd = ACconn.CreateCommand();
cmd.CommandText = "select count(*) from banuser where banip ='"+ip+"'";
int ips = Convert.ToInt32(cmd.ExecuteScalar());
if (ips > 0) //检查是否有存在IP
{
SqlCommand cmd1 = ACconn.CreateCommand();
cmd1.CommandText = "Select bancount from banuser where banip ='"+ip+"'";
int bancount = (int)cmd1.ExecuteScalar();
if (bancount > 2)//核对已经违规次数
{
Response.Write("<script>alert('您因为多次提交非法内容而被禁言中');</script>");
rfvValidate.IsValid = false;
return;
}
}
else
{
Response.Write ("");
}
}
else //没有发现非法内容
{
Response.Write("<script>alert('您所提交的内容中含有非法内容,请慎重');</script>");
try
{
///
///提交次数判定
///
SqlCommand cmd = ACconn.CreateCommand();
cmd.CommandText = "select count(*) from banuser where banip ='"+ip+"'";
int ips = Convert.ToInt32(cmd.ExecuteScalar());
if (ips > 0) //检查是否有存在IP
{
SqlCommand cmd1 = ACconn.CreateCommand();
cmd1.CommandText = "Select bancount from banuser where banip ='"+ip+"'";
int bancount = (int)cmd1.ExecuteScalar();
if (bancount > 2)//核对已经违规次数
{
Response.Write("<script>alert('您因为多次提交非法内容而被禁言中');</script>");
rfvValidate.IsValid = false;
return;
}
else //没有超过次数自动计数
{
string banusersql="update banuser set bancount=bancount+1 where banip ='"+ip+"'"; //计数器+1
SqlCommand ACc=new SqlCommand(banusersql,ACconn);
ACc.ExecuteNonQuery();
rfvValidate.IsValid = false;
return;
}
}
else //IP不存在的时候新加入违规IP
{
string sqll3="insert into banuser(bantime,bancontent,banip,bancount) values ('"+addtime+"','"+this.content.Text.ToString().Replace("/r/n","<br>")+"','"+ip+"','"+1+"')";
SqlCommand sql3=new SqlCommand(sqll3,ACconn);
sql3.ExecuteNonQuery();
rfvValidate.IsValid = false;
return;
}
}
catch(Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
ACconn.Close();
}
}
fs.Close();
sr.Close();
ACconn.Close();
if(this.IsValid)
{
//全部确认无误后进行下一步,例如插入留言数据等等
}
六.字典部分:
字典文件名为 zangs.txt 可以随便改,代码里有
字典结构为 哈哈|哈哈1|哈哈2
需要字典的请留下邮箱,该字典包含敏感词,脏话等等,收集加工于网上来源
相关文章推荐
- 微信小程序 wxapp内容组件 icon详细介绍
- 2011 wireshark 抓包工具 使用说明 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
- python中的字典详细介绍
- Xilinx Vivado的使用详细介绍:使用IP核、例化IP
- python中的字典详细介绍
- 2011 wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
- logstash filter geoip 转换IP为详细地址等内容。
- 禁止掉非法IP登陆服务器
- java写宽带连接.adsl拨号,并且检测断线自动重新连接,更换ip
- 百度蜘蛛(BaiduSpider)IP段详细情况介绍
- TLD运动检测与目标跟踪详细介绍
- 【Android工具类】用户输入非法内容时的震动与动画提示——EditTextShakeHelper工具类介绍
- Java Map集合使用方法介绍(1)——在字典中添加内容并显示
- nginx 禁止IP访问服务器和非法域名绑定你的IP
- Nginx设置禁止通过IP访问服务器并且只能通过指定域名访问
- 2011 wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
- python 字典的详细介绍
- 血液检测的性质需要血液分析仪为我们详细介绍
- wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
- 百度蜘蛛(BaiduSpider)IP段详细情况介绍