通常在编程中程序员要考虑的问题不仅是代码效率与代码复用性,而且还要考虑一些安全问题{% 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 |
|