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

16 篇文章 0 订阅
14 篇文章 0 订阅

实训的第一个月过去 了,那个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:网上论坛上面,整理得到的。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值