您的位置:首页 > 数据库

【网站安全】简单的Js脚本攻击sql注入攻击

2017-08-03 11:37 183 查看
实训的第一个月过去 了,那个CRM项目也要告一段落了,到了最后老师检查作业的时候。

没想到老师居然要用骚操作来 测试,一上来就来个js脚本攻击,然后接着一个sql注入登陆。

额,mmpd。之前也没这样讲啊。不然肯定不会这样写 啊。什么js剔除关键符号关键字,sql带参数的。

现在想去改,工作量太大了。就做个输入替换处理吧 。

1、关键字符号"<>/-' "替换

data: {
Action: "getLogin",
username: ($("#username").val() + "").replace(/<|>|\/|-|'|"/g, ""),
password: ($("#password").val() + "").replace(/<|>|\/|-|'|"/g, ""),
LoginVerStr: ($("#verifycode").val() + "").replace(/<|>|\/|-|'|"/g, ""),
},



2、如何批量删除数据库中被注入的代码?

DECLARE @fieldtype sysname
SET @fieldtype='varchar'
--删除处理
DECLARE hCForEach CURSOR GLOBAL
FOR
SELECT N'update '+QUOTENAME(o.name)
+N' set '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')'
FROM sysobjects o,syscolumns c,systypes t
WHERE o.id=c.id
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
AND c.xusertype=t.xusertype
AND t.name=@fieldtype
EXEC sp_MSforeach_Worker @command1=N'?'


3、创建一个触发器,只要有</script>就不给插入

 ps:对性能会有点影响

create trigger tr_table_insertupdate
on tablename
for insert,update
as
if exists (
select 1 from inserted
where data like '%</script>%'
)
begin
RAISERROR ('不能修改或者添加',16,1);
ROLLBACK TRANSACTION
end
go

4、防止sql注入,采用带参数的sql语句

//添加信息
StringBuilder  sql = new StringBuilder( " insert into m_phone ( pid,PhoneName,num,price,phonetype,onSellTime,color,weight,Video,Camera,phoneSize,phoneSystem,Memorysize,PhoneDesc,Standbytime,ScreenSize,Frequency,InputMethod,Soundrecord,gps,fm,mp3,email,Infrared,game,clock,Calendar,Calculator,Bluetooth)  ");

sql.Append(" values (@pid,@TextPhoneName,@Textnum,@Textprice,@Dropphonetype2,@TextonSellTime,@Textcolor,@Textweight ");

.................

SqlParameter[] paras = { new SqlParameter("@pid", SqlDbType.Int, 4) ,
new SqlParameter("@TextPhoneName", SqlDbType.NVarChar, 50) ,
new SqlParameter("@Textnum", SqlDbType.Int, 4) ,
new SqlParameter("@Textprice", SqlDbType.Int, 4) ,
new SqlParameter("@Dropphonetype2", SqlDbType.VarChar, 20) ,
new SqlParameter("@TextonSellTime", SqlDbType.DateTime, 8) ,
new SqlParameter("@Textcolor", SqlDbType.VarChar, 20) ,
new SqlParameter("@Textweight", SqlDbType.NVarChar, 50) ,

...........
};

5、通过URL传递的参数要用加密解密

传输
string szTmp = "safdsfdsafdsfytrsd";
szTmp = Server.UrlEncode(szTmp);
接收
STRING STRA=Server.UrlDecode(request.querystring(szTmp));

另外说一句:网上那些被人奉如圣经的过滤 update insert  等关键字的程序是用处不大的   upupdatedate 过滤掉 update还是update
还会造成不必要的麻烦

下面通过两个方面给大家介绍js代码防止sql注入的方法,非常简单实用,感兴趣的朋友参考下吧!

1.URL地址防注入:

//过滤URL非法SQL字符
var sUrl=location.search.toLowerCase();
var sQuery=sUrl.substring(sUrl.indexOf("=")+1);
re=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|"|;|>|<|%/i;
if(re.test(sQuery))
{
alert("请勿输入非法字符");
location.href=sUrl.replace(sQuery,"");
}
2.输入文本框防注入:

function AntiSqlValid(oField )
{
re= /select|update|delete|exec|count|'|"|=|;|>|<|%/i;
if ( re.test(oField.value) )
{
//alert("请您不要在参数中输入特殊字符和SQL关键字!"); //注意中文乱码
oField.value = ";
oField.className="errInfo";
oField.focus();
return false;
}
ps:网上论坛上面,整理得到的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: