找回密码
 加入怎通
查看: 393|回复: 5

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

[复制链接]
寻路者 发表于 2013-01-07 16:50:14 | 显示全部楼层 |阅读模式
通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{% k# a) W; j& l, Z+ r5 P2 D

: M: t/ P7 n; r# U) l) Z# O  例如: SQL注入攻击6 O8 @$ G" I& b- {7 |

; H/ g! x/ t6 t" @  XSS攻击
1 |0 ~; E2 H  i; E
# E0 f( u  @. J% S. p  任意执行代码2 w$ a! C/ C% x/ X' T2 S8 z
2 R3 Q6 b9 J  h9 X" K
  文件包含以及CSRF.
( M! l& b# R" b8 P* ]/ m# j5 H
. H+ {) s' x+ g3 t- F# u1 b' W" M  }
: v1 [- d5 T4 N: w( \9 ]* r) [/ M1 i( K. r1 ]# e" N
  关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题
( G% J8 S- A) B2 c' L
0 L/ F3 Z8 E1 R: c2 W! r" v  见代码:
5 _$ p4 O0 ~, N5 J- a1 a3 C5 d/ d" |5 D
   5 J# P- x$ [5 Z4 v; d
1 x- F% g1 O0 O1 ~
  mysql_connect("localhost","root","123456")or die("数据库连接失败!");1 i& j* v& S3 t7 k

7 v0 _% v( ^, W( ~! R, y0 v  mysql_select_db("test1");
  H: Y- T) L3 [% B1 ~  D; D% U8 ?( C; C  J/ L( P8 i
  $user=$_post['uid'];/ K% `3 L6 v6 U- Z# m

! p1 P7 x+ A- ]! ~  $pwd=$_POST['pass'];
  F: z# n- R/ ^9 N1 M' ^- q: r! q* i
  if(mysql_query("SELECT * from where1 M9 S8 Z2 u4 g2 K" q: d; N

2 J. D& V  K4 X8 {3 ~8 N  admin9 v5 @& P5 g! d1 w

+ o# ^; a  |4 g  = `username`='$user' or `password`='$pwd'"){0 S, v5 w6 \+ E% ^. y
7 T) s' ^, Y7 i3 z$ g& X$ Q, Q
  echo "用户成功登陆..";/ E0 b/ q. g! D: \2 ?

1 _% m; n+ d  z, E% U: v+ T  b  } eles {
. \: p" [" q4 T
6 K1 B( c) s9 i, ]6 n2 P  echo "用户名或密码出错";
  }8 J6 v" L. a5 P+ Q% W, w# H. A2 }3 Y  ]+ `* L
  }
0 q! E1 Y& l1 x& O) q; H
" h: H+ n. \+ \$ j" R  ?>
4 k  d4 a8 X% B8 N3 r2 t& x1 L4 w7 Z  P0 y* n
  很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。, k% }3 R1 ]& k9 T
0 {/ G3 [" S+ Z# R" K
  1.在form表单的文本框输入 "'or'='or'"或者"and 1=1"
$ _: g6 F$ @. M- Z2 E  k. f7 ?. P$ @% A8 [9 z4 M7 U
  在查询数据库的语句就应该是:
; m1 G; Q8 ^* a  @& N8 B. ?) q9 Y0 ~. E5 P% e9 ?( ?, C
  SELECT admin from where login = `user`=''or‘1’=1' or `pass`=‘xxxx'
& u2 ]7 P% A# S; `
- `5 v5 E) J  }" y: S% G  当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。
: C9 y6 ^' x) A4 I9 I( h" V7 \  Y3 o5 t4 o  S2 _, }" A2 w
  当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。
  q! N1 f& O7 ~1 O
1 o- h  l2 |9 _8 w  修复方式1:& H6 l1 n7 D2 p7 s

1 X9 S5 V2 K8 }( A9 D1 z  使用javascript脚本过滤特殊字符(不推荐,指标不治本)4 w: |5 _: [5 i9 f( z- e$ J7 v
7 l8 o, |' E: `; ]5 C) q  G$ z
  如果攻击者禁用了javascript还是可以进行SQL注入攻击。。
1 `6 y' d3 @- a& Z  p' N! L- j4 @6 H4 ~
  修复方式2:# t$ Z* z& N$ h5 k- c
* K3 }# ?$ g, r6 ~/ ^
  使用mysql的自带函数进行过滤。
3 T0 I5 i. p! ~0 n, d9 \; V7 O! U
4 @& A+ X. R& y+ U4 d$ m0 Q* v  见代码:
# z1 M" f9 X4 o1 O( N* P5 h' m9 y0 ?$ D
   3 |) |1 C9 z3 j' B# U

, T8 ~$ T+ `6 D  n3 L" F3 F  // 省略连接数据库等操作。。
2 T$ d  j; S7 h, D. R
( `7 n2 E$ G9 ?6 o  $user=mysql_real_escape_string($_POST['user']);
/ f; W# i+ z; C# T6 ~
9 s7 h2 E! B6 G; I0 s4 t+ Z  mysql_query("select * from admin whrer `username`='$user'");
6 n& @6 R) h; X" A  X  c+ S
; c% @: v* ^5 |5 z  ?>4 a5 U5 [$ ~( m1 K( f2 Q; i$ j. s
& s; O& G; g( T. w: m$ r
  既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。" U7 T- l6 x( R* p2 R! b9 f
3 x/ U# J3 t& ~
  提交表单:, s. _/ ^$ L; R0 T- ]
- T9 X6 J% l0 Z/ f+ Z1 k$ f
  " p% t( F! E: |. ]

/ j) c2 Z% v3 {9 I  
6 K# `7 ^; U3 r# X9 X; A' ]  L- J  b, I% _' b  h1 @! r* I
  
4 b, x" ~8 Q7 j  N
6 v8 n+ j: e8 `: R" E, T  ; F$ a. N7 z  h& |2 p7 _( a

2 T5 v  V1 |' Z; N8 h  接收文件:2 g5 _9 @9 [2 v2 t% |

& _- G% t* Z$ Q( f5 Y$ s2 P  if(empty($_POST['sub'])){1 H( L% m' s8 u5 H( ?$ }- r. b3 {
/ L- ^6 Z  `) h( |% {1 [; g
  echo $_POST['test'];7 {. R  j. Q. q) N& w1 d- `0 X( v

' s* K1 O3 `- T0 V) b, F7 }  }# H4 d% }' `# X( c/ V9 ]6 c5 c' N! }" s

4 R& a7 R# W. q# v$ Y) u; X; E  很简单的一段代码,在这里只是模拟了下使用场景..9 M! t( U1 d" P

( A9 Q& ?7 i: V) r) w  加入攻击者提交+ H! g0 @+ X: h2 l% ~
: b6 h, v) a: i3 A( o
  
5 D9 q( t/ h5 B. C. X) h/ C$ ?: A8 k& ~
  在返回的页面就应该显示当前页面的cookie信息。. G! G" Z, H- H, ?

8 P* [" m5 W( T( j' A5 H3 W  我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。
& K! E/ g/ G! w' X* U0 b  ?" f+ m# @5 l5 a$ N" f
  当然解决方案也有很多。。下面就介绍一个最常用的方式吧。
( X- {- C6 ~/ x' j4 n, T
2 M1 @& O7 s; S8 Z  修复方案1:使用javascript进行转义+ [. z. e6 B2 R+ W
) M2 v. m; N: R2 |$ f- d
  修复方案2:使用php内置函数进行转义& m; P* ?/ j$ A/ v3 n" ~  f

% c; X0 t2 v" J3 r/ i( h0 @# E5 w  代码如下:
6 k9 z1 m  V& @- e+ ]3 W7 M4 [3 t4 B4 ^
  if(empty($_POST['sub'])){
! u+ R" R4 R$ H
" B7 ]3 v3 B9 J5 o& {: k# v& ?9 i) |) O  $str=$_POST['test'];
6 c  j# L& g/ _2 a
& l% S7 [- {6 ?. }1 \; ]  htmlentities($srt);% P( s* m9 N1 e

3 x# q8 G. @1 a7 \  echo $srt;
3 E4 N3 X; {2 Q0 @. ^/ e, S4 l/ W3 c; O' _- _
  }4 ^. v( H: n  C" Y
: P( z) v; B" G- i, j: z
  好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。+ y) c0 W0 x# h0 B! t) h

* O2 \% b: _, h9 s) V  F  当然还有其他的解决方法:
7 t/ b6 Y* V' D0 y) v
9 d5 p8 Y9 a9 [& v2 Z" [$ a, J  例如:使用php框架
; g: h8 J0 j3 [1 S$ ^: C. ^3 \, Y6 j" q7 N
  还有其他的一些方法。。
- h0 l; _1 X' ~7 [. e3 W% H9 L2 M' T' x  e
  当然了,XSS的运用范围与攻击方式很多也很广。$ i2 h6 B& Z" W0 e3 V. _9 B& `
/ ~+ |+ `  q5 i8 n
  本文只针对php的提交方式进行过滤,还有其他的需要自己去研究
2 z, ]& _. h% D) L: J( t5 j0 |解决一切网站安全,湖盟云防火墙: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 | 显示全部楼层
蹲了这么久,终于看到有价值的讨论,支持一下!
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-9-10 21:01 , Processed in 0.039333 second(s), 26 queries , Gzip On.

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

    Powered by Discuz! X3.5

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