找回密码
 加入怎通
查看: 439|回复: 8

[站长八卦] 站在php细谈SQL注入攻击与XSS攻击

[复制链接]
寻路者 发表于 2013-01-07 16:50:14 | 显示全部楼层 |阅读模式
通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{
* t6 F; T0 z' ]4 \, }- E; ?4 T. Y2 Q# B4 B5 J/ S0 C
  例如: SQL注入攻击
" X* _. {8 w+ C# J: P5 i% K* E1 R6 e% d1 b1 x0 B) V
  XSS攻击! Y4 ^' E) v6 `3 W2 p3 z0 M

# o/ [1 F' L' A: R. \# T  任意执行代码
4 t1 o# m( f) E& {: s/ b' k5 X; h3 H" G) t
  文件包含以及CSRF.( F* e5 S, k; _5 q% c* A

( A4 X) o7 M  S% g$ {+ @1 O- Y  }/ F" x' b+ Z( ]0 I+ K  k& b
& |% N" v" Q8 d
  关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题
; ?- `8 y- w8 Q1 S/ P# ?. C# E" o2 [. v
  见代码:
" K& V7 w  o/ T' l6 K' B7 _7 o  }3 y& C; ?  \  v
  
0 _+ s. l" K5 z( b  t5 z6 c0 x+ r1 }- i6 O7 d: v9 n6 q$ `" ]
  mysql_connect("localhost","root","123456")or die("数据库连接失败!");
' `( M/ B; Q! A; \- f
1 K+ U8 o4 C, I  D1 m  l  mysql_select_db("test1");7 Q) M: l5 g2 D# v. y" r  c

3 V% T; P1 d$ l" F. u1 v) }  $user=$_post['uid'];
9 T% M3 H9 \( x8 k
# U9 [7 T  S, c  $pwd=$_POST['pass'];6 \" B0 w3 a" q' h% v9 Z

6 J! Q4 ?  G0 G  if(mysql_query("SELECT * from where$ r# r  ]' t1 c, |' j

: k7 A, l% {  _+ a' r  admin
  S5 K1 \* B% Y, G+ ?( Z0 n/ i7 o* t" b1 D3 j* l; R
  = `username`='$user' or `password`='$pwd'"){7 K" F( M  [) F
& X3 ?$ n1 l3 o5 t7 M
  echo "用户成功登陆..";
8 r  F" g$ L, d! T, Z( {, K9 y5 h" l# Y9 R) [1 n
  } eles {1 \/ t7 N1 J* W7 I; d& L& L: _$ T0 c% h

" H% E+ e1 D+ e/ u5 v2 k" Y+ y9 I  echo "用户名或密码出错";
* q5 N' v6 f# C+ S, V, n
/ y; w2 K& a* C5 v& h2 ^* H" M6 }  }
0 z% a$ f, _1 }6 a, e0 \% _7 s! i3 x% G' C1 x/ j. ?5 S' [( `' s5 q
  ?>
  W% l, B+ \6 h' p
: q$ |/ O: ^0 J- _) T6 e( s& I  很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。  @& p( z4 S! {# C* T4 \

9 \! x  ]2 e& J& M" T! g- i1 A# ]  1.在form表单的文本框输入 "'or'='or'"或者"and 1=1"
: y4 h( @4 z4 L% n# O; M2 m9 j6 ?6 P) c" ?3 u
  在查询数据库的语句就应该是:2 V( _/ o( o- J! t; x# H# v

- l, C) r0 k( \% |) q* p  SELECT admin from where login = `user`=''or‘1’=1' or `pass`=‘xxxx'
& ]# f8 U6 v  ^1 @2 `  Q; k1 ^' g0 k4 E7 M, L& X2 D) A. T
  当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。
% A# Q, k2 X; C+ ]& i8 C( g
  C) ^- c0 r1 `  当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。$ m2 P9 l) T$ Z# K' D* W
$ p& G$ Q5 ?* l
  修复方式1:
& l6 j9 ^; [& k( c* m. @8 B, P) E8 t' n1 p) @) F
  使用javascript脚本过滤特殊字符(不推荐,指标不治本)/ H6 v1 ?3 G) j: C! m, f& T

) m+ j3 V9 e: v$ M* k5 _4 z  如果攻击者禁用了javascript还是可以进行SQL注入攻击。。
  g/ Z! [# S& @) g, l( A: h" }* G( }9 U; v/ e7 ^) \/ I
  修复方式2:
6 R) n, z  S" I6 m: u  ~; }; c, i8 O+ ~) E! A" C$ V
  使用mysql的自带函数进行过滤。5 k! a1 e3 E- s+ g, Y( y) s

8 C1 n0 B5 h6 k' g! c, F/ @* a  见代码:
# r, @) o, G# I1 |) ]
$ T4 g. s2 u. e  
4 s! P1 `$ ?7 @' p/ [& d! L% v! a7 Z4 k6 Y
  // 省略连接数据库等操作。。
. X5 t! o; S* u9 S% h  ?4 P# u# c  e$ m* t2 W0 r
  $user=mysql_real_escape_string($_POST['user']);
! P4 b  o0 \) \( F- V( _6 d
( J* k3 E" D; w0 z  mysql_query("select * from admin whrer `username`='$user'");3 ?: p4 {+ ?6 w7 g, [7 F% K* F
/ D5 g% M* d- R2 R5 @) L  F
  ?>
8 F& w, y) J2 @: V
3 j( l$ n  Q$ V4 r9 C  既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。
+ h( g% s$ c0 J! n, F' {/ l9 h3 f# W' l9 l0 e
  提交表单:2 {2 R$ m: t' K  p  b; Z) @
' G" J  D8 Q. G2 B4 K. y
  ( C, t* v  {8 D
" X* b. o$ F* n$ B
  / ]% C5 }+ A" x: g! i' E
0 v# x- {( X% C; G
  
9 M, ^2 m8 `0 p% P: t) ~; S
8 G' `- p0 W' N) U& H1 Q  
6 J5 g( k, S5 A" b( ^2 a4 U
( _! u8 x7 u1 ~6 H( O  接收文件:
# k  M9 E9 U. N: _. O3 ?. z$ e+ p) l6 c' W
  if(empty($_POST['sub'])){  f9 M6 w- Z8 y; I

& m8 S4 |  B! u- g2 x: {$ R  echo $_POST['test'];) O7 P1 v2 H" p

. ~9 h# G: w% K. [- y" }5 {$ M2 y- I  }  J4 ~, W% Q) \2 W7 Y
0 W2 q3 ?. ]9 f2 `
  很简单的一段代码,在这里只是模拟了下使用场景..
5 x& n; t) x5 C# ?' G$ G5 Z
7 S* ?' z% u+ _7 @* C; D  加入攻击者提交( B4 K, @- q+ Q

( D3 \/ J) I( l, ^/ U& K  
8 y* `6 m+ Y' C( E, Z+ d( x0 s- o. Y% r0 R0 B8 A# w
  在返回的页面就应该显示当前页面的cookie信息。- L6 w2 l1 u, I6 K
4 R1 j  F+ J4 \
  我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。
8 R+ ~% n! {9 g, I0 m! q
, \5 }# H! p: V! d% \  当然解决方案也有很多。。下面就介绍一个最常用的方式吧。/ n( x/ R9 M8 ~/ M( y1 t
5 L$ i( L; h: Y
  修复方案1:使用javascript进行转义" j( W( B  L- Q; t' g* w
3 t0 Z1 B9 v3 }, R  e' O
  修复方案2:使用php内置函数进行转义% M8 F$ d' ?; P  \" W+ y& A: D5 F4 s
* l% R5 o# z1 C2 E, f: ]* W
  代码如下:7 w) K9 H8 W5 [* H2 K# I2 w! K

- I+ a1 A8 g- |  t* E$ W5 _  C  if(empty($_POST['sub'])){
1 [5 W! h/ i' h$ J" x, r; y5 B, {7 Z: P- P/ K; d
  $str=$_POST['test'];( N. }/ m: p2 z: {6 A

, B; C& c. S( Y- L. b; p, g6 b  htmlentities($srt);7 W: a3 m7 B4 P. }4 V3 Q

4 o6 b) j! L! I# s$ `8 ?/ K  echo $srt;
5 u& \2 ~" Y! p1 f" D6 j( V
: Z0 P- F1 x- o! s7 m7 W) x  }
& ?5 ?1 q3 H1 `- }( v3 C. u% t1 d, C: i& d: J
  好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。
: E3 m1 N6 ^+ s$ A& l' w  ?6 S
3 }+ o+ O; t2 h$ \- l$ ^; T  当然还有其他的解决方法:
9 T" B( ]+ v# W, ]9 Q, T* `
5 w3 U; p1 P- u5 A. P9 g" |  例如:使用php框架
# m, P8 n1 b' c% g( l; D2 `3 J# j' m* u( y1 |
  还有其他的一些方法。。
4 M+ S$ X* i) P7 l0 `( i! f' j: I; c' \  X: D
  当然了,XSS的运用范围与攻击方式很多也很广。
+ U6 r5 C% Q* H2 V+ L
7 _! u  W1 \) w3 g7 s* Q  y) |  本文只针对php的提交方式进行过滤,还有其他的需要自己去研究" O# V# s: H: Y- x% N) ^8 O
解决一切网站安全,湖盟云防火墙:hnhack.com

暂时无法加载帖子列表

回复

使用道具 举报

what2016 发表于 2026-02-26 11:06:55 | 显示全部楼层
这个分享太实用了,刚好能用到,感谢楼主!
回复

使用道具 举报

辛子 发表于 2026-05-10 10:24:35 | 显示全部楼层
完全赞同,我也是这么认为的,英雄所见略同~
回复

使用道具 举报

星神子 发表于 2026-05-23 21:05:27 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复

使用道具 举报

baoshai888 发表于 2026-06-03 13:25:08 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复

使用道具 举报

qq2646182142 发表于 2026-07-15 16:01:08 | 显示全部楼层
蹲了这么久,终于看到有价值的讨论,支持一下!
回复

使用道具 举报

a199011 发表于 2026-09-28 01:26:15 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

西万路小混混 发表于 2026-10-28 00:29:47 | 显示全部楼层
楼主辛苦了,整理这么多内容,必须点赞收藏
回复

使用道具 举报

袁小灵 发表于 2026-11-06 09:24:20 | 显示全部楼层
分析得很透彻,很多细节都说到点子上了~
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-11-6 10:19 , Processed in 0.052089 second(s), 26 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

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