防SQL注入N法
防SQL注入N法网站要做足安全, 特别是对防SQL注入, 因为大多数程序员都会很粗心大意而导致网站被黑/O:av A'yr9a'B
php脚本:WNF%R,I
基本上php本身就带有类似功能的函数了, 比如mysql_real_escape_string, addslashes等. m-s]aU
大多数虚拟主机商比如耐思尼克([url=http://www.nicenic.com]www.nicenic.com[/url])都会开启了magic_quotes_gpc这个选项, 那提交数据时, 会自动执行了addslashes这个函数, 这样就可以杜绝大多数的注入了3R,Et2` @0U
另外因为mysql是不分数字还是文本,都可以用''来括住, 所以建议在写sql的时候, 参数都用''来括起来
使用方法如下:B|H0Wt1n2Ni
$query = mysql_real_escape_string("SELECT * FROM products WHERE name='$productname'");R;OQeRN
asp脚本:&RGE;TL
FUNCTION CHECKSTR(ISTR)
DIM ISTR_FORM,SQL_KILL,SQL_KILL_1,SQL_KILL_2,ISTR_KILL /b4cA/?1Q9t8l
IF ISTR="" THEN EXIT FUNCTION`LC q%d;Q1?/bO
ISTR=LCase(ISTR)
ISTR_FORM=ISTR+A$zuZ8_ ~
SQL_KILL="'|and|exec|insert)|T;V_~0G7|
|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|set|;|from|="5WP"Y-{WO;dW9K
SQL_KILL_1=SPLIT(SQL_KILL,"|")
FOR EACH SQL_KILL_2 IN SQL_KILL_1
ISTR=REPLACE(ISTR,SQL_KILL_2,"")
NEXT h? @+y-] R
CHECKSTR=ISTR
ISTR_KILL=REPLACE(ISTR_FORM,ISTR,"")1pX u{&JtR
IF ISTR<>ISTR_FORM THEN4`"?:U,Z;FP n"`E s
RESPONSE.WRITE "<script>alert('警告: 您提交的数据["&ISTR_FORM&"]中含有非法字符 ["&ISTR_KILL&"]');history.back();</Script>"
RESPONSE.END
END IF4e V4~ g1l/G8L!N Sa
END FUNCTION[,ql2Y G"N(Hf9H
C#脚本:
bool CheckParams(params object[] args)G)v*n!kq7S{+j] A
{
string[] Lawlesses={"=","'"};4DKyJJOEk!S
if(Lawlesses==null||Lawlesses.Length<=0)return true;
//构造正则表达式,例:Lawlesses是=号和'号,则正则表达式为 .*[=}'].* (正则表达式相关内容请见MSDN)
//另外,由于我是想做通用而且容易修改的
函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;nr2NH,rM&o
string str_Regex=".*[";
for(int i=0;i< Lawlesses.Length-1;i++)(~r1P B.eR hc
str_Regex+=Lawlesses[i]+"|";!nRZZrh$YQ ~N
str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";
//!N"{a1O4B4PFz)So
foreach(object arg in args)$L*P"a9O+C i:VY
{`@m*h$m0Ess
if(arg is string)//如果是字符串,直接检查!MT8jl9v7e r@k
{
if(Regex.Matches(arg.ToString(),str_Regex).Count>0)
return false;
}
else if(arg is ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查
{4G2W&UNw7?#jR"G6J
foreach(object obj in (ICollection)arg)
