找回密码
 加入怎通
查看: 418|回复: 6

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

[复制链接]
寻路者 发表于 2013-01-07 16:50:14 | 显示全部楼层 |阅读模式
通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{
2 D* c& S6 @' C- b- o) ?( C' _/ `5 R2 L! }/ o7 v8 `
  例如: SQL注入攻击2 J5 R+ q( ]6 @, s% G* U) B

' W. L. I; l$ q/ N  XSS攻击: O: O- v% p; t0 A* Z+ S/ ]0 w! ^
- |2 i; K/ _- d! K! Q
  任意执行代码+ a9 i' E" @5 J/ S) E

( E5 ~# R# l+ }# @0 S  m  文件包含以及CSRF.6 q  t0 T) q: Z4 \

' L( u5 e" j3 ?  }( [$ U- w- L' p& _6 H4 s  I4 g

  Q0 n" I' N* R6 N( Z  关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题4 k6 c& l8 P- U, \
8 [# h- w7 v8 o# ^* j4 V+ y
  见代码:7 Y% `; C! }, G% H( d0 x
# \# e; ~2 s9 \- L2 l
  
0 K6 M: q* F  B
( V6 K) o) I& p' E# n1 c+ b  mysql_connect("localhost","root","123456")or die("数据库连接失败!");
! i# D% @( f; Z, a0 g) f0 X/ y+ i2 ?3 l$ S
  mysql_select_db("test1");
% F* g7 R$ D$ B- E7 C
/ B, v$ r( k  T% H# \  $user=$_post['uid'];9 `0 \5 j, o- M
8 m. z4 f) }8 u' v2 o% \
  $pwd=$_POST['pass'];
0 z7 e: ]+ p5 g' ^9 e: w
' F* _' W5 d  j3 E2 _8 v  if(mysql_query("SELECT * from where
* B! }7 N0 q* l4 I$ x
( ^( Z# u+ W) u0 M! ^9 E; U! }' q( I7 }  admin! A1 P! |/ W$ u- R& m+ |
" M  Q4 T( O; U- \
  = `username`='$user' or `password`='$pwd'"){, E/ M' Z  N% i& h

7 O. Z' S1 |, S$ A* L3 {! t3 c  echo "用户成功登陆..";
5 A" u9 K; B, @3 f) [+ ^* ?, L1 A  }! y
  } eles {- Z& Y9 u# d1 a/ v3 r

+ i# X0 _  H* V1 |3 K2 F  echo "用户名或密码出错";
1 `8 P; d2 c, k* o7 k; M/ ~
( x( A/ h7 {1 ^& a6 V8 J  }& G- {; m" O# X+ X+ z8 N) ^
: h8 d% K$ Q, e
  ?>: @3 v, o; L8 s
6 Q3 i2 _4 R: K8 W  W5 b
  很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。
4 ]8 v0 z$ J9 j1 D5 c: t- [4 O& p0 ~3 `
  1.在form表单的文本框输入 "'or'='or'"或者"and 1=1"/ C( \4 m4 V, Y7 A, \
% y/ ~8 \9 r1 l. c
  在查询数据库的语句就应该是:/ i' F/ j; L  a" B) V$ e
4 V* X  D+ ?! q$ a6 E! j  e; R3 L
  SELECT admin from where login = `user`=''or‘1’=1' or `pass`=‘xxxx'5 l) Q5 V7 G1 V5 Q3 b

9 Y5 w4 g6 p1 E! Z$ `9 b) m( |2 o3 f  当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。  X1 A: m# w0 y) E2 f( ]& m

4 S1 d/ Y3 Z# G  当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。" Y/ k: _7 Z% E6 _

: g1 W* m- h3 I; g9 i8 @5 a# c; M  修复方式1:
( t& h6 M3 u5 O& m# L1 Z" k7 K) T8 ?' w! b$ L+ H
  使用javascript脚本过滤特殊字符(不推荐,指标不治本)
0 o) ]5 v' l4 B- V, y& x- U+ L0 `0 F( I9 i! h
  如果攻击者禁用了javascript还是可以进行SQL注入攻击。。* o: {9 p4 g- T" j

2 w9 L9 c, M0 r* g  修复方式2:
. y' V" p3 k7 @  R# h% R' X+ S- x+ G  ]. ~% o% O* S
  使用mysql的自带函数进行过滤。& ?9 d* b3 S: V0 d) ^8 `" s

6 A( a9 h. Y6 v" t5 Y+ K  见代码:8 F# s% b3 Z6 Q- r4 O  ]/ ]

0 }6 n# f/ w9 a3 p) H) s# R4 v   1 ^1 {: V8 i0 f% p$ z
' j' c. o, ?- h. }+ ?. p
  // 省略连接数据库等操作。。
! _/ `6 G* z- m2 R$ R8 _
! d' L$ X* L% k( e' q, @  $user=mysql_real_escape_string($_POST['user']);9 t; W/ B0 q# {. m" F$ N

3 X" j/ m5 G7 s3 [: E+ X/ ?( a8 d  mysql_query("select * from admin whrer `username`='$user'");3 P* V% i; ~. M' P! g

) C+ T9 i1 r, ~4 u; f, P4 L  ?>6 z1 P# t4 m2 p" @" f" ~" T
4 |1 E  ~/ q/ L+ M5 e. ]
  既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。
6 E* `/ n5 N% H9 h5 ]# G3 K; W8 F: l% e$ M
  提交表单:5 M1 ]1 U) _& ^* O

; P- G6 |( k$ d2 |( |; J$ w  T  y! D  
+ {$ `( N, `2 F- [- {( z% h' M* o, S# c+ J9 F1 H
  
! F! U" D: @0 s5 w( w! p& ]# U: l/ B7 O  z$ S  c7 m" t2 e
  . ]2 E  {( |4 a$ _9 i9 P2 W
$ G5 k; e9 T+ b5 q: U, w
  
; ^/ E, b& S! _% |) u# s4 P5 L# K1 y& J
  接收文件:6 U) r& d) F. q7 e
6 ~5 j" r. H" s
  if(empty($_POST['sub'])){
9 y3 t; S  x5 m* s' D; e
0 M8 b! v4 f3 B, X4 g  echo $_POST['test'];* |' K" R3 W  z( F9 a

2 J# K; S9 W" F. X  }
$ H! k8 L6 F2 K
. u. I# ~  }" }% J: X  很简单的一段代码,在这里只是模拟了下使用场景..- D; k+ a, I4 l. @

3 u$ k2 Q/ D: G' i  加入攻击者提交
& N" ^0 Y9 P- g3 n" M+ q7 }
& @& i! J& a' w. Z* C; H! v  
# w4 Z% W# K% f2 V, [4 L5 ]7 k
7 t2 l9 k% ]9 L3 t3 y  在返回的页面就应该显示当前页面的cookie信息。
' H; y& Z; q7 e7 e: s0 F2 |: D' t: {" d$ O  f' d) D: g
  我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。1 Z( e# t/ e: j1 a& x

# v( e  y* e4 E) X+ O& U; C  当然解决方案也有很多。。下面就介绍一个最常用的方式吧。
. I  Z$ [- P& p, H7 h: ?
, R8 z$ u$ G$ |0 D2 H& M2 i" ~  修复方案1:使用javascript进行转义
; t& y' U* ^7 K  G9 X2 O7 l( m2 O6 |' ^; U- s$ G
  修复方案2:使用php内置函数进行转义. U% o+ Z, a$ l: R/ Y

. q0 F& X9 S+ _: N  代码如下:
3 p6 g- U8 N" \! ?0 }% y, @
6 d* h4 E( e: h5 i  if(empty($_POST['sub'])){" i; X+ ~, V2 i; r  Z
. ^2 `* O' L$ P, [* `/ L8 O5 p, }
  $str=$_POST['test'];
5 e+ P* a+ a4 l9 m' x) N, B! E3 O$ A' ]# ^: j" u
  htmlentities($srt);
& w3 W7 i) V. a( j' g2 [6 f5 Q9 J9 y$ s5 U9 i! W% ~
  echo $srt;; ^' u" {7 J8 ]
) z: F, o8 p* x$ p. A3 G8 o
  }
1 P) o: k* l! ~1 B7 ]/ v5 S5 d1 q' K! k: ]( Q, v$ Y
  好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。- A, n* T/ [& A2 e* ~4 I

5 B: D: r" l  S8 n/ O* h% m  当然还有其他的解决方法:
& y' d5 _/ m  G: W/ g! s. u
% H  c( p( I8 V  例如:使用php框架
3 P# w+ z+ t* j( E* O
; Y/ G( x5 Z  q( Z3 I5 \; a  还有其他的一些方法。。
, D, I* l$ |; W5 [2 h
2 N; O% s0 ]/ G5 O  c  当然了,XSS的运用范围与攻击方式很多也很广。
0 Q. ?* [# z9 i9 ?  I0 p) i
) p) r: E; B+ P! N* G! |1 R4 B" I  本文只针对php的提交方式进行过滤,还有其他的需要自己去研究" w+ W1 f& c' z, I) |2 B4 E% [+ w
解决一切网站安全,湖盟云防火墙: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 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-10-26 23:31 , Processed in 0.041326 second(s), 26 queries , Gzip On.

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

    Powered by Discuz! X3.5

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