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