找回密码
 加入怎通
查看: 363|回复: 4

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

[复制链接]
寻路者 发表于 2013-01-07 16:50:14 | 显示全部楼层 |阅读模式
通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{: R& S: s7 z  e- U0 _
1 o/ r* I7 W3 x, q
  例如: SQL注入攻击: `+ B9 c" v1 Q8 l; N# B) a

# M2 b" [1 m' W4 j: }) k  D( t+ e: U1 v+ a  XSS攻击, K$ ^+ D5 y  l" X3 S

( k7 U  [* p" P( q4 c: [- U% \  任意执行代码2 t- g$ U) K5 G5 {5 {4 D7 {

* ?5 O1 W1 {* q! s  文件包含以及CSRF.
0 J' }4 o, Q+ g- k- N! l! n! p) q
  }# N* |) B0 J% F) e- X' W5 |$ p
' S1 @9 ^/ V' b: D
  关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题
5 x2 x8 i: ?9 P  H' C, h9 `+ _# x- e3 K& G
  见代码:2 I& |4 ^. B2 `( Y1 d% b
' L# O1 A- {2 x: V3 L
   . U- n9 I2 t! c2 M
4 M# E. S7 Y* m3 \
  mysql_connect("localhost","root","123456")or die("数据库连接失败!");  C6 i! s9 h, H3 p! O
5 t) S; }: p4 v$ x4 S: c" F
  mysql_select_db("test1");
- _+ B6 c9 E, d1 T, R1 P" ?
. q5 K/ e1 y8 l: s  $user=$_post['uid'];
& V# l' w7 C; p4 f- T. o4 B  ]7 C' f- S% D5 H4 Q  a+ v; L
  $pwd=$_POST['pass'];
) n% X' @5 b7 A  j" a1 r5 t. e! i7 ~# T( W
  if(mysql_query("SELECT * from where
; d, U9 s2 u1 l( J6 F( `5 B% s8 N( g3 I, M  i
  admin# B8 S4 U' b6 t6 S4 U+ E

. q+ Z2 w, F1 b9 {9 G) |  = `username`='$user' or `password`='$pwd'"){
$ n2 r8 U* V7 Y7 _' U5 o$ }, d3 K$ b) ^% Z( i- L  m/ n
  echo "用户成功登陆..";
' |% y  e" ^- q) k/ R& l- L
; E+ w( l, [  e  } eles {8 j4 f' y- y' {& s6 b; Z. j
$ H, \- T% N. G/ P5 m, k& I
  echo "用户名或密码出错";# q$ `  e+ C. r1 Y: l2 y- y9 l
; V) S" r: b+ n
  }( ?6 Y. \' E* L

; E4 N# u  z% e2 J  ?>
: }, P5 B! N( {' x# M- s2 M! a4 c& B! b" V. X
  很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。  o" x0 ?8 c5 M1 u2 e7 \

3 p2 `6 W9 d& x: y% b* ^! r0 d  1.在form表单的文本框输入 "'or'='or'"或者"and 1=1"
! O* P# m; U* E; n% l( p4 S- H5 S  l( o
  在查询数据库的语句就应该是:3 t( M# u: K; P  V- O8 K

" R% V! r  \$ a2 D9 x  SELECT admin from where login = `user`=''or‘1’=1' or `pass`=‘xxxx'
: x" N% X* g  d3 w7 `0 w. x4 J8 L! E  Y' f
  当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。" V1 ^- F) M( u+ ?3 [  U) O# s3 q8 [
9 l6 s' Y6 W! c
  当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。
9 k7 s( ]5 y4 _2 R
/ p4 Y. {! f! p  修复方式1:
% v2 @/ a: A9 q0 X: J' x, _( w* l1 f
  使用javascript脚本过滤特殊字符(不推荐,指标不治本)& F% G0 C2 T6 I7 ~4 E* h* m
+ t7 X9 K* |( @; r& b: G
  如果攻击者禁用了javascript还是可以进行SQL注入攻击。。
7 P6 O) H# T: X7 O) Q4 l$ Q1 H9 H' W3 Y7 R  ?; T
  修复方式2:
! \3 c9 o4 L3 p( Z( ^6 q$ P! y' C* z6 k
  使用mysql的自带函数进行过滤。
' p9 W3 Y+ \- I3 u1 U6 D' ?: M2 n, G" l- [5 U6 d8 O/ V
  见代码:, O8 T6 |, k! w% p1 G
9 K4 f+ d0 ~/ p  e' h4 c) C
  
5 @: C7 y: M$ D( T" S
1 Z' H/ p, L) X; I0 c& ]! `  // 省略连接数据库等操作。。
: m3 X/ E4 `4 e" z6 @. u! U) h7 _
. |  X: |# F8 ^3 _% r7 `  $user=mysql_real_escape_string($_POST['user']);
/ d) k9 f% n# ~: b4 A; I' e# E( i; w0 U6 y3 L# p% h
  mysql_query("select * from admin whrer `username`='$user'");- G+ h) Z: e& i8 v" C% F7 k

. g! B, T6 L2 @4 v( R1 Z0 E  ?>
  z& e. M: X- s4 y7 @, z& f; Y1 e
6 v4 D- e" o: D  g! J  既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。
5 S' _. F6 {: U: V8 p- R9 u5 D; K: n; |. u# A
  提交表单:6 H, s) H, R# m( b+ w6 n3 x

4 }" s. b  M" f2 s1 }" d! Z  8 f4 k* ]# B, X' \! |
% P6 c+ e8 @0 {( Z2 ~
  
- _) B: t3 y5 D  P
. ^; Q' s% o3 v+ R& E/ e  F$ d  
0 y7 k5 Y6 x0 E1 r( v+ {3 J* c" v2 S( f8 O; }3 x& P! T& W! w
  7 k) y7 i  }4 Y" ?! N  M0 E% K* d

$ N$ q5 T3 w2 t: n9 P  J  接收文件:0 L. G3 o; S" s0 C& j) K- d/ T( A% U
- `/ _4 x) d/ W3 [) U: E
  if(empty($_POST['sub'])){; `$ V. M' _) t" D

+ H: O$ {" F6 U0 ^  echo $_POST['test'];7 m6 D5 c0 w5 _; ?, i+ e
; q9 k' W& `' x% F7 y
  }
8 Z' p( v8 O% _5 J0 [1 H
1 q" D' y4 q9 I3 _, L/ y9 Q6 j  很简单的一段代码,在这里只是模拟了下使用场景..
' q0 T; ^: P& n
* ?% Y: i+ ^+ ^4 T  加入攻击者提交! `) ~6 M$ F6 j# j, ~$ Z9 I
0 G" ^. p0 U3 t% T& r% x. y
  
1 t. N/ U0 V$ q8 H5 q  A
/ L6 d2 M% F2 ^7 ^  A; v4 n6 V0 W  在返回的页面就应该显示当前页面的cookie信息。
; q8 d  W! w5 V. r, Z# V. C4 K" ~$ {6 ^+ T
  我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。
9 L, F# A8 H! |1 Y" Z* n
& [3 R/ c9 U9 \% \* i* p- A  当然解决方案也有很多。。下面就介绍一个最常用的方式吧。
3 ?9 B2 h$ F' L, a
1 t; @  o: M5 d! e2 k  修复方案1:使用javascript进行转义
1 i5 P3 j0 x0 j  @: l' D# R$ t  J. h. J$ H! p
  修复方案2:使用php内置函数进行转义1 N7 S0 Z* b: d5 j. a, q1 H

- ]0 C# c* V3 F8 T8 B- D1 n# d) V  代码如下:
6 W0 X& c# R, b+ W& K* L; d8 K5 d/ v
. p- q/ n# C; g5 X3 S  if(empty($_POST['sub'])){
5 d8 I9 e, {8 K/ n0 `. F% P- b1 |8 G  f3 h5 \
  $str=$_POST['test'];
5 {- L5 J2 c! b( }- C' `/ B2 j! a+ [/ ?1 _; L3 w
  htmlentities($srt);
' c+ `1 m0 B0 e) g) o; @
3 F# \* d% L" V0 U- }8 w  echo $srt;* R; U, s8 a9 A' [8 q

; O3 S* D, [$ m) Z2 W  }
, v& f& t. x+ ?2 @# Q' O, G9 [# a1 \; k8 X" W8 I9 ~
  好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。
* W( u2 W9 k$ t% _; i9 ^$ R! t2 G$ c! s5 _! a' b8 Q2 [
  当然还有其他的解决方法:
( ?' g9 h5 \* i0 m4 {7 O
, q3 a1 F) C$ d1 P5 o  例如:使用php框架: e4 Y9 C+ n+ f% Y8 s
" O. K& }( M6 [( |- [1 }6 X
  还有其他的一些方法。。
( ]. d  X: q2 i$ }6 G- m9 l2 c) @- _, R( A+ s
  当然了,XSS的运用范围与攻击方式很多也很广。6 O* v1 F% d% r, f: K' y3 r" W$ `; r

) J+ C- z! ?& h. p  本文只针对php的提交方式进行过滤,还有其他的需要自己去研究
* w+ f2 N# Q% _: m& o  m解决一切网站安全,湖盟云防火墙: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 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复 支持 反对

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-6-14 18:33 , Processed in 0.025960 second(s), 24 queries , Gzip On.

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

    Powered by Discuz! X3.5

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