通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{0 K v l7 m- N2 B5 c
; I* `5 W( D) e! | 例如: SQL注入攻击
# A/ c4 f/ Q: o5 A9 C* G) Q. a1 D# A" j: y
XSS攻击" T+ T% I: S6 F9 B# |4 C$ O- `
# t/ c/ x* I( V) V" e 任意执行代码
& P5 ~6 ?+ O( k' ~9 r8 u a1 n
2 F1 L, u) c& t/ F& J$ w' p 文件包含以及CSRF.
' ~2 `" I6 w: S" _: D h2 l3 ]) o
$ x! D5 S1 q- ]+ g: K }6 ]2 R! _3 B' N& J [3 ?# [
8 n' s; w" B9 h+ P: u& J( N
关于SQL攻击有很多文章还有各种防注入脚本,但是都不能解决SQL注入的根本问题
( Z& y* |2 \3 t- x8 R$ X
) D2 Y" ?* s; w* n8 V+ A* b 见代码: i' h8 W4 k6 k; ~( @
4 F! A0 k- r# S
& C5 {2 D7 i C& P! I! g. S
6 C8 ^- S% I, K! n) j8 X0 @; y0 c# |
mysql_connect("localhost","root","123456")or die("数据库连接失败!");
7 y# {2 Y" _# ^3 N
9 ?& E6 K4 w0 `2 O6 M% `& K mysql_select_db("test1");
9 a$ p: { A* r% v2 z/ D d- d; S5 j+ k
$user=$_post['uid'];
4 Q( m' \+ I B6 I9 w3 u* R9 f) I' i/ i; ]
$pwd=$_POST['pass'];$ P6 h, j" u+ F7 }
, V3 s% w7 n$ m4 P if(mysql_query("SELECT * from where
; u1 u" i4 q A2 o6 C& y, h+ ] n. j- y
admin* z9 g# J4 L' ^- q' | [' j7 a. T
! a! @- T& x$ _& b' ~) H
= `username`='$user' or `password`='$pwd'"){5 x, [* o6 H, A% v" a: m8 x$ \
- W3 S( K# V, i1 k
echo "用户成功登陆..";- o4 i! k& p1 P. @! U; b0 _
% \& D( [! W& e X6 q! K8 U% R } eles {9 X" q y/ r& n% M k
9 s8 I! o$ ?) o* k. Z5 s) E) ]6 x echo "用户名或密码出错";) h) g% b5 K8 b) S ]
5 J" v9 F3 u+ f: K
}
9 r6 E$ `4 C3 R: V7 L }% f6 }/ f: Q6 g p4 v- F
?>
4 S0 N/ h" v8 x; K+ @ A- h, u( x O& l
很简单的一段代码,功能是用于检测用户名或密码是否正确,可是在一些恶意攻击者中提交一些敏感代码.后果可想而知.. post判断注入的方式有2种。
2 _1 \1 Q4 `% ?/ B
9 i* i/ c0 ^; S 1.在form表单的文本框输入 "'or'='or'"或者"and 1=1"3 s! m- Q ^. T1 m5 A
9 ]- m* m" c! y6 D1 D9 @7 p 在查询数据库的语句就应该是:
4 |; F3 e# A h7 F5 D7 B7 t0 \
3 G; @9 ^+ y. G9 L SELECT admin from where login = `user`=''or‘1’=1' or `pass`=‘xxxx'
8 |% e. Z+ ^8 T/ s8 O7 p5 t
( D; t& L) X& n" ? 当然也不会出现什么错误,因为or在sql的语句中代表和,或的意思。当然也会提示错误。
, \* R3 _7 J4 v, @! X* @: e% f; F7 H' R9 Y6 F S* u# Q& ^& N
当时我们已经发现了可以执行SQL语句之后就可以查询当前表的所有信息。例如:正确的管理员账户和密码进行登录入侵。。( w7 ?0 Y* `) t
9 K, C& ~% N. D, ]2 w7 f8 Y 修复方式1:
' }& {- `# Q: `7 E, D# K' W$ Q2 S X! S) w' e, D. i
使用javascript脚本过滤特殊字符(不推荐,指标不治本)
B4 Q; B2 i0 R. t/ F6 y: T# C8 o6 m* G( a
如果攻击者禁用了javascript还是可以进行SQL注入攻击。。
/ `/ E0 r2 ]4 E, y6 v4 B ]" H+ A5 C7 r! ]& q9 C- N/ u# q! \
修复方式2:
a: ~) k) |) H: K6 [0 Y# x# s. C0 O4 J( \# S: Y7 K
使用mysql的自带函数进行过滤。
( B* A1 c; z" P8 ?* W8 _/ d8 {3 o+ {0 |3 S" |
见代码:# I% i% a9 Y0 I# {1 v5 U, ^
2 e& P% T8 U( a 2 D8 M& d9 \+ b4 ^2 ^1 T4 x+ W
- r8 c! k* R3 t) k2 i8 }- T
// 省略连接数据库等操作。。# g0 n1 P0 t+ q0 H! H/ |
3 r) {) b6 b5 {/ T L# c
$user=mysql_real_escape_string($_POST['user']);
2 v/ Y; B7 c* @, H/ L( B0 m/ x2 p
mysql_query("select * from admin whrer `username`='$user'");
6 t: B& _9 y. x2 H+ l1 g w! j" u6 v- Z/ D0 E6 b/ \) S3 H4 g- p
?>
. k4 H# Z0 [7 K: i; \( U0 m+ v/ E
! S0 Q( Q2 e$ [' ^/ j3 D 既然前面说道了xss攻击,我们再来说说XSS攻击以及防范吧。。
! g S9 W5 M$ S0 Z7 U j2 F, m- ~. C4 _
提交表单:, d8 d p% m% d( _, m! N
3 O& L5 }2 j! A' U& W9 a$ G( { A ! [: i, R/ C/ \5 z& D
. G0 Z; G9 O, o2 \8 g0 F3 m6 C4 M5 m
C7 G% T3 b* Z$ _5 A
: R' t* l# W% B1 U# ?# M5 @ 5 Z$ \" M5 B- u1 E- x( k
' Z" o0 V0 z. r: @% q0 ^: l ) y0 v$ c* E: \" ^/ Y* t1 h
9 r- R7 s8 p" U O1 W6 d j 接收文件:0 x: L$ I( H5 f! {& s& ]
( V2 @: G. H( I* N if(empty($_POST['sub'])){
2 S3 O8 I: ` S% b f# l- M8 _% m5 E# H1 w
echo $_POST['test']; P- u: m& A/ u" h
b1 ]. T" c! ?% \& {
}
+ n$ r5 ?2 }8 |/ o! J- k; D- h$ W2 V' y, X/ H9 V
很简单的一段代码,在这里只是模拟了下使用场景..% x D5 N5 P. l5 G. G" ?5 f0 V
. `! b4 @8 y# L 加入攻击者提交
j0 v$ ?$ | G: y' T' i: [ K
; J. t$ x6 Z. Y5 e' R j/ L, N% _2 t& p3 n/ [& F$ m
" ^$ ?- I B* Y
在返回的页面就应该显示当前页面的cookie信息。
( M9 |8 T) l: e: w
. _3 t6 M- d! R+ R 我们可以运用到某些留言板上(提前是没过滤的),然后当管理员审核改条信息时盗取COOKIE信息,并发送到攻击者的空间或者邮箱。。攻击者可以使用cookie修改器进行登陆入侵了。。# v! `# W V, V% f7 h/ K8 P
/ f- |4 |9 z- q. M
当然解决方案也有很多。。下面就介绍一个最常用的方式吧。
0 a0 ?! f N9 R5 I d# F" y
$ I# ?7 d! x( r/ C2 N 修复方案1:使用javascript进行转义0 a+ k/ ^8 r5 k$ @4 S6 n% C$ ]
; y" c" [. w" Z2 n+ J- } 修复方案2:使用php内置函数进行转义
# R* ]* T0 w) y( i8 e
0 U% K" M7 y8 K/ m# g2 q 代码如下:
9 _* e9 `; }0 U
5 \3 O2 f7 b5 e$ ?* y0 T2 {; ~& c if(empty($_POST['sub'])){
1 k1 z. j/ R3 x9 \' ~3 g* q& [7 B$ W4 k2 v+ z# x& ~
$str=$_POST['test'];
]( u" _" A Q8 m0 |3 P+ X8 {" \4 V" @8 A# }" a
htmlentities($srt);
4 L: P( q$ M+ r6 [4 g( q+ ?3 C' j. G: h# P3 A3 X& A) J
echo $srt;: ^5 d+ y- ~3 e7 r. [3 v
; C! v% E3 i6 X, ~1 `$ |7 d+ y }
) W! M2 @, N3 y" u! _7 `/ C, T9 a/ x9 g+ V/ P
好了,关于SQL注入攻击和XSS攻击的案例与修复方法就讲的差不多了。$ k, M$ U. c% f5 V2 a
4 l: q$ \* r: K; p 当然还有其他的解决方法:
4 ?. Z) O0 e: d! y) l
3 c% S! z! L8 ~! K3 ^/ U1 e 例如:使用php框架% l/ x5 _& y9 [5 n9 M5 F
9 d, Y& a- F5 V: r3 L 还有其他的一些方法。。# W/ j) v+ f$ W( q7 u. \% v
1 |, p; \# k& m+ f
当然了,XSS的运用范围与攻击方式很多也很广。$ l p3 T: I! {+ C5 r( t# T7 \ h1 {
; w2 g# K6 Y! Z! y& ?
本文只针对php的提交方式进行过滤,还有其他的需要自己去研究, b& Y, E' c Z+ M. y; Q* [+ u
解决一切网站安全,湖盟云防火墙:hnhack.com |
|