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

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

[复制链接]
寻路者 发表于 2013-01-07 16:50:14 | 显示全部楼层 |阅读模式
通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{
9 v! A1 b$ A% u. V
* j0 m$ @. r; L% _9 a  例如: SQL注入攻击1 S+ {% c1 g3 T9 ^7 b* D, b

5 m# S5 o0 B  Z- h" C2 P  XSS攻击" S: x  t9 B! n5 \' }& Y: p+ K, _: P
1 n8 U$ a( T9 ]$ @
  任意执行代码
+ v- E. K  Q) e2 H
1 e2 T# M4 q( T( f: S8 D# |  文件包含以及CSRF.
% B0 H- N9 h( m6 Y& ]0 l  e5 A( h* Y: z/ R) _( F5 w& I* n
  }
6 |. Z+ w# a, |; {) \$ H3 N
1 Z( C$ Y) L; u  关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题
0 ~# b6 w4 V4 M; I$ v1 }* g
7 x* g/ e- ]" p8 x. N+ w; Q  见代码:+ C# y0 F3 G: E

/ _5 V/ y( o- ^; W8 F& _" M4 T. X7 a" d  
5 C2 |# z, y1 ^$ I% H
( }! `/ F5 o: Z1 t- }  mysql_connect("localhost","root","123456")or die("数据库连接失败!");
" b# u9 O% m; L4 k! p  \# P2 e# r0 R- S
  mysql_select_db("test1");4 G: i- E$ b! d( @: |
. p  j% [0 b! S. g
  $user=$_post['uid'];1 {+ Z9 ?  u0 H2 }

4 I5 @# _/ V6 o% p" Q2 `  $pwd=$_POST['pass'];
( V& I' O7 f' W* t" ]; m
/ |$ m) b# h  i% z2 H  if(mysql_query("SELECT * from where$ ]/ {' |- _3 q6 c
* h: R8 T6 `6 [3 [
  admin" e: {2 B$ w8 F# ]$ Z7 r- N8 C

8 J, X0 ]8 N( _0 N0 T  = `username`='$user' or `password`='$pwd'"){1 @; c3 A" G% }( o" ]% Q

/ m. ~( B/ G/ b! B- n  echo "用户成功登陆..";+ }0 V# v/ Z" Z* {6 c

& S3 v' D! h' C  } eles {3 v. N5 S" z  n2 ?
2 f9 l! y- K, K3 l0 J' G8 e+ _
  echo "用户名或密码出错";# v+ V6 X- U% M; Y" m  z
( V8 J1 z0 ^& |2 f9 M
  }
  O& H- F; u% H( I$ Y7 Q, s- C' T' S. S0 C2 x, U# Q
  ?>
5 D3 D, Z9 L5 w+ u- ]. k' m: A- O
; K$ ?% ?; H% U# q  很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。
6 |* `, h* t' M' t/ e- V) K9 n  m; H3 q! L7 T' }' ~
  1.在form表单的文本框输入 "'or'='or'"或者"and 1=1"
2 V; Z& F) e+ @5 I
, }. L$ \- g$ L% _7 d, c# S$ z  在查询数据库的语句就应该是:
% C! P3 X) S1 z. K  V4 V6 b" ]) m) o. X0 x" N" L
  SELECT admin from where login = `user`=''or‘1’=1' or `pass`=‘xxxx'  l. i3 y4 p' l* ^1 B
; a5 Y! Q" J1 S4 y; u1 p4 G
  当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。
" J) B( z+ G$ y' [: C
1 y. g4 x+ d2 X) }6 m5 }  当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。
/ P" u# \. G0 U" B5 w9 K2 \, r$ O! |
  修复方式1:
2 ~7 o! Z2 w+ J, ?! C( y- \0 T6 B1 ^( B1 ^
  使用javascript脚本过滤特殊字符(不推荐,指标不治本)  _8 q$ {  ]/ U2 v# N; B( v( _: C2 f2 [

" O# F' x' h) z  如果攻击者禁用了javascript还是可以进行SQL注入攻击。。
8 x0 f3 D  Z3 Z. _+ P6 m" G3 m' X( f: |
  修复方式2:2 ]. h( h/ T" W% k; z+ f+ q5 C# s

3 T* z" [: d7 L$ t  使用mysql的自带函数进行过滤。
) r& `6 t5 [( h# l. n
: S: w2 [3 B. O1 o, \  见代码:+ F- f2 e& z0 N& _

5 c$ z$ K2 p. C9 O9 i  
$ Z# j1 H; T" _6 E* `8 K8 n( G& Y' g2 }2 {
  // 省略连接数据库等操作。。8 y4 z; P- A3 X% ?0 J& d# d
; X0 w0 {1 f- Z+ _5 y  U. d( U
  $user=mysql_real_escape_string($_POST['user']);8 s$ X# J$ G1 X8 l7 i, a
' R+ o$ i( h9 I2 F
  mysql_query("select * from admin whrer `username`='$user'");
8 S0 v6 v, R- ?' p6 O# Z2 C" g, ]  [- ]( |
  ?>
' U9 {' J5 \; @
: w) p- ~5 F5 b  既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。8 z6 Q# q7 c) I$ T: `
$ d3 X+ p, c; N+ U8 R" k
  提交表单:% Y+ i6 p( ~% `' g6 x1 v4 K2 I
/ z  A0 Q8 }! t! K" V' i& _
  
$ E; i$ W3 h8 T  _- `* ]/ E- s; q7 I. S# \7 n! c
  
; j/ p: X' {0 g
% l% }9 k/ I7 r  ) G, |8 H) U3 I% ^% p

3 w) M: v) O! t7 h* k7 Q* ~8 m$ [0 t  
4 [+ K2 L' D/ ?) G( _) h
3 j; p/ u6 E  i1 v  接收文件:8 ?5 K; f# k4 \# X5 r( [

% k5 l% e1 y$ J5 _9 R- s  if(empty($_POST['sub'])){1 ?6 r4 e# I6 V* R8 W

# k- p* t- d0 w- a  echo $_POST['test'];
5 f; `+ {$ b! ~" w0 E3 H# n( D$ m) _9 N2 z& C
  }
. `. z5 _: p- G, b
4 g1 V, f' T2 q: Q  很简单的一段代码,在这里只是模拟了下使用场景..
) B( |, _# P3 D. L2 H
" }8 a& ]0 X' T4 }# B  加入攻击者提交
; O: \! Q0 m7 m% ~  L! o% w& U1 q! h+ i
  # h, V( T7 i, r- z0 f: A

6 I: k2 a1 y+ z8 [) q2 K* b  在返回的页面就应该显示当前页面的cookie信息。
& m4 C) }5 Y, T7 x. y# q+ t1 d( j3 [: b0 L& h% }- O4 i& _/ g
  我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。" X) U* I9 ~/ {& g/ A8 M

! ?6 u4 J, L0 A; W! R) V+ `% ?* }' q  当然解决方案也有很多。。下面就介绍一个最常用的方式吧。
  ~. t- t. S) o% t
- s% P9 A; [4 ~  修复方案1:使用javascript进行转义, i4 i7 @" M  `, i4 S6 L9 z8 G) O
9 |) a" y  O: S# s
  修复方案2:使用php内置函数进行转义' d0 v6 i# ~" A  P
" B5 E: U; [3 \
  代码如下:
0 z% x- z$ p: a8 }& M
; R; n! a5 b4 {  if(empty($_POST['sub'])){9 U% p. x! j/ E' ~
. Y- P5 L7 [3 h0 b! G9 m% [
  $str=$_POST['test'];
4 C. f$ X4 |2 r
8 o2 ~5 U+ p0 m  htmlentities($srt);
% q) m/ P' F) A+ }
6 b/ d( n' J3 K3 U; A  echo $srt;
$ `& Z" z" Q, W" o! y' r$ A; h8 |; r; L& x. s% G& H  t
  }
0 U; D  n& o* V5 u! M( R+ c2 F& z  g  E6 x
  好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。9 G9 D& }3 f! {+ n3 z
# V9 O* K  |% A$ V9 D
  当然还有其他的解决方法:7 A+ e5 _5 i* D9 l5 ?9 p) c  s

" i8 o. U& Y% W0 A5 X5 q2 H8 C0 {- a  例如:使用php框架
4 m  G  T: }  O1 ]0 a1 u+ D+ M- q" S) Z! c  K' F0 r
  还有其他的一些方法。。8 X# {1 o5 }3 `& [

0 S, O  `7 a% ]" p  当然了,XSS的运用范围与攻击方式很多也很广。- y0 L5 u8 G# n) x% ~

: s& f  X" _0 q  本文只针对php的提交方式进行过滤,还有其他的需要自己去研究6 x4 g% K2 u7 g5 Y! c
解决一切网站安全,湖盟云防火墙: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-7-27 16:26 , Processed in 0.036675 second(s), 26 queries , Gzip On.

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

    Powered by Discuz! X3.5

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