您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 网站策划/UE > 网站常见漏洞和解决办法
自己最近也刚开始学习网站安全的技术,以下有写的不对的地方还请高手多指点啊.网站漏洞主要集中在动态网页中,静态网站基本不存在什么漏洞。1.sql注入和跨站点脚本攻击2.上传漏洞3.文本编辑器漏洞4.网站目录及密码安全解决办法:1.sql注入和跨站点脚本攻击:对这类漏洞来说就是用一些安全扫描工具进行检测,然后修复,以下是我个人总结的一点小知识:对于asp网站:一。跨站点攻击1.在需要用户或管理员输入数据的地方用js去除危险字符js脚本:functionRemoveBad(strTemp){strTemp=strTemp.replace(/[$&%'()+-=;/]/g,)returnstrTemp;}//asp脚本方法%'过滤掉危险的html和特殊字符,防止跨网站攻击functionnohtml(str)dimreSetre=newRegExpre.IgnoreCase=truere.Global=Truere.Pattern=(\.[^\]*\)str=re.replace(str,)re.Pattern=(\\/[^\]*\)str=re.replace(str,)re.Pattern=([\'\&\-\+\=\(\)\;\[\]\{\}])'去除特殊符号str=re.replace(str,)nohtml=strsetre=nothingendfunction'对要显示的数据进行编码,防止显示危险字符functionshowdata(str)showdata=server.HTMLEncode(nohtml(str))endfunction%对于aspx网站来说,有一个通用的安全检测类是很重要的,以下是个人总结:namespaceDZ.Security{//输入数据安全性相关publicclassSec{#region检测输入的内容是否有攻击的可能性///summary///检测输入的内容是否有攻击的可能性////summary///paramname=str/param///returns/returnspublicstaticstringpar_queryString_forStr(stringstr){//大于20很可能是注入攻击stringstr_process=null;if(str.Length20){str_process=str.Substring(0,20);}else{str_process=str;}returnstr_process;}#endregion#region检测int类型的id号的和法性///summary///检测int类型的id号的和法性////summary///paramname=str要检测的字符/param///returns/returnspublicstaticstringpar_queryString_forId(stringstr){//ID数字整型最大值65535不超过5个数字stringstr_process=null;if(str.Length5){str_process=str.Substring(0,5);}else{str_process=str;}returnstr_process;}#endregion#region硬性过滤脏字符串///summary///硬性过滤脏字符串////summary///paramname=str要处理的字符串/param///returns/returnspublicstaticstringpar_filter_forNews(stringstr){//硬性过滤//依次为政治,情色,竞争对手,拿我的免费产品卖钱的家伙string[]filterStr={法轮,轮功,真善忍,明慧,大法,台湾,台独,藏独,西藏独立,新疆独立,蒙古独立,江泽民,朱镕基,GCD,赤匪,共党,国家安全,国家机密,民族矛盾,情色,裸体,日你,日她,日他,干他,干她,sex,bitch,遨游,aoyoo,狂舞,kuang5,性交,做爱,成人,叫床,底裤,射精,肛交,乱伦,骚b,马比//领风五年,域名:};intfilterLen=filterStr.Length;for(inti=0;ifilterLen;i++){str=str.Replace(filterStr[i],);}returnstr;}#endregion#region对危险的html,Sql标记和特殊符号进行过滤///summary///对危险的html,Sql标记和特殊符号进行过滤////summary///paramname=strHtml要过滤的字符串/param///returns过滤后的字符串/returnspublicstaticstringFilterToTxt(stringstrHtml){string[]aryReg={@script[^]*?.*?/script,@(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*((['])(\\['tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?,@([\r\n])[\s]+,@&(quot|#34);,@&(amp|#38);,@&(lt|#60);,@&(gt|#62);,@&(nbsp|#160);,@&(iexcl|#161);,@&(cent|#162);,@&(pound|#163);,@&(copy|#169);,@(\d+);,@--,@!--.*\n,@select,@delete,@update,@insertinto,@Insert,@Delete,@update,@create,@drop,@exec,@dri,@[^\w\.@-]};stringstrOutput=strHtml;for(inti=0;iaryReg.Length;i++){Regexregex=newRegex(aryReg[i],RegexOptions.IgnoreCase);strOutput=regex.Replace(strOutput,string.Empty);}returnstrOutput;}#endregion}//数据加密,解密publicclassEncAndDec{publicstring_QueryStringKey=logowang;//URL传输参数加密Keyabcdefghpublicstring_PassWordKey=hgfedcba;//PassWord加密Key#regionurl参数加密解密publicstaticstringUrlDecode(stringinput){returnHttpUtility.UrlDecode(input);}publicstaticstringUrlEncode(stringinput){returnHttpUtility.UrlEncode(input);}#endregion#regionmd5字符串加密///summary///md5字符串加密////summary///paramname=str要加密字符串/param///returns/returnspublicstringMD5Encrypt(stringstr){try{byte[]hashvalue=(newMD5CryptoServiceProvider()).ComputeHash(Encoding.UTF8.GetBytes(str));returnBitConverter.ToString(hashvalue);}catch{returnString.Empty;}}#endregion#region加密解密相关///summary///加密URL传输的字符串////summary///paramname=QueryString要加密的字符串/param///returns/returnspublicstringEncryptQueryString(stringQueryString){returnEncrypt(QueryString,_QueryStringKey);}///summary///解密URL传输的字符串////summary///paramname=QueryString要解密的字符串/param///returns/returnspublicstringDecryptQueryString(stringQueryString){returnDecrypt(QueryString,_QueryStringKey);}//////加密帐号口令/////////publicstringEncryptPassWord(stringPassWord){returnEncrypt(PassWord,_PassWordKey);}///summary///解密帐号口令////summary///paramname=PassWord/param///returns/returnspublicstringDecryptPassWord(stringPassWord){returnDecrypt(PassWord,_PassWordKey);}///summary///DEC加密过程////summary///paramname=pToEncrypt要加密的字符串/param///paramname=sKey加密密钥/param///returns/returnspublicstringEncrypt(stringpToEncrypt,stringsKey){DESCryptoServiceProviderdes=newDESCryptoServiceProvider();//把字符串放到byte数组中byte[]inputByteArray=Encoding.Default.GetBytes(pToEncrypt);//byte[]inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);//建立加密对象的密钥和偏移量des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);//原文使用ASCIIEncoding.ASCII方法的GetBytes方法System.IO.MemoryStreamms=newSystem.IO.MemoryStream();//使得输入密码必须输入英文文本CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);cs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();StringBuilderret=newStringBuilder();foreach(bytebinms.ToArray()){ret.AppendFormat({0:X2},b);}ret.ToString();returnret.ToString();}///summary///DEC解密过程////summary///paramname=pToDecrypt要解密的字符串/param///paramname=sKey解密密钥/param///returns/returnspublicstringDecrypt(stringpToDecrypt,stringsKey){DE
本文标题:网站常见漏洞和解决办法
链接地址:https://www.777doc.com/doc-3439670 .html