十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

[转载]防止黑客发起 SQL注入的方法

上一篇 / 下一篇  2008-11-22 14:00:27 / 个人分类:SQL注入

51Testing软件测试网6n$f}n9SWRn

  网站要做足安全, 特别是对防SQL注入, 因为大多数程序员都会很粗心大意而导致网站被黑。

"} K s%v6]2sT"OS051Testing软件测试网P Z)@9P){*gq

  php脚本:

n(KW1s(k}_X [0

^)CN b6tnt0  基本上php本身就带有类似功能的函数了, 比如mysql_real_escape_string, addslashes等.

P#_B ?%r/Z!^k!o051Testing软件测试网2?5Bn4_s`S;v

  大多数虚拟主机商比如耐思尼克(都会开启了magic_quotes_gpc这个选项, 那提交数据时, 会自动执行了addslashes这个函数, 这样就可以杜绝大多数的注入了51Testing软件测试网{ CuTK:P@ q

F8pU#NSW0  另外因为mysql是不分数字还是文本,都可以用''来括住, 所以建议在写sql的时候, 参数都用''来括起来

'WJ elXc%k h~0

rL%B;N~ t0  使用方法如下:

o*?e3g5| vC/Y051Testing软件测试网!w `%Xy(zGx\B

  $query = mysql_real_escape_string("SELECT * FROM products WHERE name='$productname'");

![Y&^b j@'b0

#Vmfd#bI+bB UR*G0  asp脚本:51Testing软件测试网9OW3N'V|%HH8r

51Testing软件测试网~XxeZW |W

  FUNCTION CHECKSTR(ISTR)

/azm3Weo,@,a0

R K*f$z6w-^u0  DIM ISTR_FORM,SQL_KILL,SQL_KILL_1,SQL_KILL_2,ISTR_KILL

/r _3e]*v |.uR0

nf8^~D:M5A |0  IF ISTR="" THEN EXIT FUNCTION51Testing软件测试网5A~WP bv

51Testing软件测试网 n mo(v$d'\Q

  ISTR=LCase(ISTR)51Testing软件测试网H*xm.uz+e#[5KG

M(]i,t J V{nyR0  ISTR_FORM=ISTR51Testing软件测试网A&Bo*Ss

*xw)_*J WS ~U0  SQL_KILL="' and exec insert51Testing软件测试网/]j n]_~B&PK

51Testing软件测试网V3~pt5ihq+H%H US M

   select delete update count * % chr mid master truncate char declare set ; from ="51Testing软件测试网 xH }5S9rH"@

a)^,Oz o%sMl,z4a0  SQL_KILL_1=SPLIT(SQL_KILL," ")51Testing软件测试网!m*eXYNR

51Testing软件测试网!U#K2\V#\

  FOR EACH SQL_KILL_2 IN SQL_KILL_1

S)b,u rL+Xg(L C051Testing软件测试网,T9Z1Bi0^(M9}

  ISTR=REPLACE(ISTR,SQL_KILL_2,"")51Testing软件测试网1x#y!K"uQ

51Testing软件测试网__1IY2R4q7z w m

  NEXT51Testing软件测试网 f:@~tN9zJ

$Bc-m,`0I2wK0  CHECKSTR=ISTR51Testing软件测试网:yb@/~o9w0C

51Testing软件测试网#IF%D4rl*lq"q:M

  ISTR_KILL=REPLACE(ISTR_FORM,ISTR,"")

Bz.@Vos051Testing软件测试网 @Hg:z K'NJD

  IF ISTR<>ISTR_FORM THEN

$M&U9P"r_0

ik-^r oX%NA[0  RESPONSE.WRITE ""51Testing软件测试网#}UPx(?3YCS

51Testing软件测试网 X._5]8{7@uY

  RESPONSE.END51Testing软件测试网TU H n6|6\

^mR/xzvA [W\0  END IF

U4~@$| W W'xG4|-B051Testing软件测试网(?wz5qLy1t Yl

  END FUNCTION51Testing软件测试网wuID te n4ndZ

51Testing软件测试网Fkj9Mt;bD

  C#脚本:51Testing软件测试网YM7R~9Qf/g+Vs

B t9c0T;~/mf0  bool CheckParams(params object[] args)
uy w#?j0
6wF+W^C0P` L0  {51Testing软件测试网efM9_l}^t
51Testing软件测试网/@ d'_m(S:n
  string[] Lawlesses={"=","'"};51Testing软件测试网|)Li9j+i Q R!` S6i
51Testing软件测试网XT;Hg^
  if(Lawlesses==null  Lawlesses.Length<=0)return true;51Testing软件测试网$J(C0U5B1Z q1M}

F)HF v!P~:q0  //构造正则表达式,例:Lawlesses是=号和'号,则正则表达式为 .*[=}'].* (正则表达式相关内容请见MSDN)51Testing软件测试网TVqf:?(`7@

7?:AE2Ch:v3jq0  //另外,由于我是想做通用而且容易修改的
.ZOEh4sU Vp0
kgC\uW0  函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可;
GB Q q e#fb4C051Testing软件测试网 C"k bIW#P
  string str_Regex=".*[";
D,vh TPK;{+P0
5`_0y!m0iK+? QuT0  for(int i=0;i< Lawlesses.Length-1;i++)
9KC"\`VX8u(C0
6H-B`J7\0  str_Regex+=Lawlesses+" ";51Testing软件测试网7@dfUIa Y9H

C Ec*^+W;U"F.g0  str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*";51Testing软件测试网uJ i`2x
51Testing软件测试网U3Q$i+H;J&s_p
  //51Testing软件测试网,eo e*B"ZF

8K.P+TjH*X0  foreach(object arg in args)51Testing软件测试网X,y5[Y$t:Cn
51Testing软件测试网K(\ ?T,C6?7P_@s1E
  {
^8?Qnd\^/j/b0
gf._4O)s0  if(arg is string)//如果是字符串,直接检查51Testing软件测试网Ws7c,P b3o,w3d
51Testing软件测试网@ y#k7` dz
  {
JO~+{5_(Lw0
!p5AE1J?l9{R d0  if(Regex.Matches(arg.ToString(),str_Regex).Count>0)51Testing软件测试网5GG@8O2Q*ZDn1}CpF

G7x#^$[s4L'PzM0  return false;51Testing软件测试网:I3^g5Y6h a cB

Zv(BmZ$b5]:E!v0  }51Testing软件测试网?2~f#n,W.h n

NP\G|j9X0  else if(arg is ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查
8n;F e"zMH:iJ0
Y"c@@@%P g0  {
N&T$N7[H.X$~!u8m0
p([g.Q'l+kd*]0  foreach(object obj in (ICollection)arg)51Testing软件测试网H'{G(LzL(?6W0bJ`.{;a

*FIs{AZ0  {
Kz9z)@Q051Testing软件测试网 x(M[)m8E%h
  if(obj is string)
-N,}w,V[a0
PcX/g1Pk&p0  {51Testing软件测试网 {,Lx$L#j-|
51Testing软件测试网-efMt*Am9N M f
  if(Regex.Matches51Testing软件测试网2wKmIz c

a [4a9@&f~0  (obj.ToString(),str_Regex).Count>0)51Testing软件测试网ezc(yETuP8l

;k A+h E C1q0  return false;
4k\ w#ZD+KJs3x@+{051Testing软件测试网%N+Q7KL6aO
  }51Testing软件测试网8X$b WqD
51Testing软件测试网;KZ-IF`g)_X
  }
;P#C(k)v#bp%SZ0
:zM S}As ~-a'x0  }
3^6nf@ d]o0
z9}@Ol:fv/Of0  }51Testing软件测试网:eb}X I!D

5N:{{ }tI,~&b0  return true;
#m7o zsu"I0
:o-QGU,Z0  }

9K6hx7c'rv0

TAG: SQL注入 攻击

 

评分:0

我来说两句

Open Toolbar