武穴论坛

 找回密码
 中文注册
查看: 622|回复: 0

防SQL注入N法.

[复制链接]
发表于 2008-4-19 16:10:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?中文注册

x
<p></p><p>网站要做足安全, 特别是对防SQL注入, 因为大多数程序员都会很粗心大意而导致网站被黑</p><p>php脚本:<br/>基本上php本身就带有类似功能的函数了, 比如mysql_real_escape_string, addslashes等. <br/>大多数虚拟主机商比如耐思尼克都会开启了magic_quotes_gpc这个选项, 那提交数据时, 会自动执行了addslashes这个函数, 这样就可以杜绝大多数的注入了<br/>另外因为mysql是不分数字还是文本,都可以用''来括住, 所以建议在写sql的时候, 参数都用''来括起来<br/>使用方法如下:<br/>$query = mysql_real_escape_string("SELECT * FROM products WHERE name='$productname'");</p><p>asp脚本:<br/>FUNCTION CHECKSTR(ISTR)<br/>DIM ISTR_FORM,SQL_KILL,SQL_KILL_1,SQL_KILL_2,ISTR_KILL <br/>IF ISTR="" THEN EXIT FUNCTION<br/>ISTR=LCase(ISTR)<br/>ISTR_FORM=ISTR<br/>SQL_KILL="'|and|exec|insert<br/>|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|set|;|from|="<br/>SQL_KILL_1=SPLIT(SQL_KILL,"|")<br/>FOR EACH SQL_KILL_2 IN SQL_KILL_1<br/>ISTR=REPLACE(ISTR,SQL_KILL_2,"")<br/>NEXT<br/>CHECKSTR=ISTR<br/>ISTR_KILL=REPLACE(ISTR_FORM,ISTR,"")<br/>IF ISTR&lt;&gt;ISTR_FORM THEN<br/>RESPONSE.WRITE "&lt;script&gt;alert('警告: 您提交的数据["&amp;ISTR_FORM&amp;"]中含有非法字符 ["&amp;ISTR_KILL&amp;"]');history.back();&lt;/Script&gt;"<br/>RESPONSE.END<br/>END IF<br/>END FUNCTION</p><p>C#脚本:</p><p>bool CheckParams(params object[] args)<br/>{<br/>    string[] Lawlesses={"=","'"};<br/>    if(Lawlesses==null||Lawlesses.Length&lt;=0)return true;<br/>    //构造正则表达式,例awlesses是=号和'号,则正则表达式为 .*[=}'].*  (正则表达式相关内容请见MSDN)<br/>    //另外,由于我是想做通用而且容易修改的<br/>函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;<br/>    string str_Regex=".*[";<br/>    for(int i=0;i&lt; Lawlesses.Length-1;i++)<br/>        str_Regex+=Lawlesses+"|";<br/>    str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";<br/>    //<br/>    foreach(object arg in args)<br/>    {<br/>        if(arg is string)//如果是字符串,直接检查<br/>        {<br/>            if(Regex.Matches(arg.ToString(),str_Regex).Count&gt;0)<br/>            return false;<br/>        }<br/>        else if(arg is ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查<br/>        {<br/>            foreach(object obj in (ICollection)arg)<br/>            {<br/>                if(obj is string)<br/>                {<br/>                    if(Regex.Matches<br/>(obj.ToString(),str_Regex).Count&gt;0)<br/>                    return false;<br/>                }<br/>            }<br/>        }<br/>    }<br/>    return true;<br/>}</p><p></p>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文注册

本版积分规则

手机版|武穴信息网 ( 鄂ICP备2021017331号-1 )

鄂公网安备 42118202000100号

GMT+8, 2025-2-17 03:57 , Processed in 0.040702 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表