- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2024-1-19 17:32:32
|
显示全部楼层
我们来看俩段通常对上传目录设置无权限的列子,配置如下:
% E6 k* e, c$ }1 M
' t/ |" f9 H. W1 h7 \. ?2 O代码如下:% Y/ e: q* Q+ e' r* n6 ?
) g: [% j2 Q- L, j1: m; t0 }6 {* D- a
2- z. r* b8 v6 I; G
3, B* \! o5 _( H6 u
4% F6 c/ j" V& ] L
5
8 P$ v k( ]% o6( e) c9 B' Q+ t7 _8 Y
<Directory "/var/www/upload">
5 ~* {. x: E6 b2 V e) M<FilesMatch ".php">
% V( `( l8 l- R4 k+ yOrder Allow,Deny/ p% G. B; ^ p
Deny from all
5 d% s: e" d3 b8 t# n# `</FilesMatch>
5 j6 f3 {+ W8 \5 i</Directory>
: Z+ K3 o1 n: o
" O4 M3 N' x% X; k$ F2 Q5 H0 k1 F$ J. a) V
这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。+ ~* |# N9 i/ R. R, b# C B
但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了
3 g: k$ ?: }/ B1 A, c0 ^2 v
( x& g6 E% M+ O: g1 f! _2 o6 l这里我说下我个人的解决方法,代码如下:- j$ n9 w7 i$ _5 P: S" Y+ a3 T" ?5 Y4 @
$ N' u- ^. l1 Z& B F<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">; a. m# h6 _# m$ o* K$ O8 l- ^
ErrorDocument 404 /404/404.html
9 ^* ?3 o& l* o( M% s' `4 \ErrorDocument 403 /404/403.html
: n, x' a8 V* A9 F<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$"> \& X1 ~6 z# u% f8 @ e& B0 C
Order allow,deny
8 \$ j7 C1 D% CDeny from all
" K7 j( Z4 ?4 c2 `</FilesMatch>0 w) H6 I j2 k
</Directory>
1 A" P( R2 ]% Y6 m5 S5 q/ A
+ X$ k% B/ S6 U上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的1 f* s( {* P+ e8 Q& e# u$ \% F
; r, U i0 z) F4 F" R* e
另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:' {* U4 Y6 \7 a2 U |( F
Apache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中. ?9 C; p' X% L# b
代码如下:, [+ ]# I3 j) [, @3 L
- `- d) |4 i; B( B/ p! P0 R( z8 ~, d
1
% C4 @+ M& e. X8 N! x% _2
7 H' D7 w$ T& R4 F' K* G3& a: w/ m. z: ]' w- p
4
! f# ], P x4 D' } @9 vRewriteEngine on RewriteCond % !^$
! |- [5 ^% y8 {0 J% JRewriteRule uploads/(.*).(php)$ – [F]7 `8 Y! @3 t' Y: r5 {' z
RewriteRule data/(.*).(php)$ – [F]9 N: C. I' f3 P- `
RewriteRule templets/(.*).(php)$ –[F]
1 F: @& r4 R9 R9 V( U) S! k' x8 e1 R
1 T# w# N8 K% q8 b2 |9 T0 x8 Q( }8 R: H1 h, \9 G$ G
另外一种方法,代码如下:( l6 W: w8 D* I' U6 ~$ m: x3 o4 i
% T+ P2 D" c( O. S) w. G% o( F<Directory "/var/www/upload">! S) ?# z& ]* J3 ]- t9 V- ^' P
php_admin_flag engine off
! p' {3 x8 o! l0 H, v+ t</Directory>
3 N. W" N+ J: ~0 ~# i t" L+ v) i9 M
此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:
( q" S$ C! _- OThe Apache service named reported the following error:, M7 x$ i& s: d% X) ^' K& D
>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.- J' ^8 T4 z( H" ]
8 l/ ]. A8 x" U# W这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!1 [$ S/ u5 k) b
, w6 W$ F8 v( i8 U- {& W
【apache配置禁止访问】
' x8 f+ y }3 p, v1. 禁止访问某些文件/目录8 L: d, M' x) V: G! D$ m! v7 W
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:! \/ r3 I0 b) h( k% W- Z
<Files ~ "\.inc$">
- \/ c& k- q- h$ X4 A, v Order allow,deny
0 x- C/ s7 y7 @% ~- d Deny from all
% j$ d) T* O, i/ {7 V</Files>% I5 k/ K0 H4 g f$ s) z5 q$ u4 H
# Q5 y# D1 E" v5 G多个的话可以这样配置已验证过:2 a/ N5 Y: d3 i9 C' h H$ G
" q* U0 ~/ ^8 c/ z, u0 j" H#不允许访问 .inc .txt .sql .conf扩展名的文件- W+ Y' L. u1 G8 P
<Files ~ "\.(inc|txt|sql|conf)$">/ m$ U- P) Q/ [3 r; y
Order allow,deny; ~1 ^. E. Z! I/ H
Deny from all
1 ^) B0 n4 y6 R! P- _; [% }8 [</Files>
& |0 r4 C2 _5 E" ^
4 x D5 i( P9 ?# }) b
& S1 F/ z% m% z; X$ Q3 h1 n9 @9 ]+ i& e
) e7 D, h1 G9 }; W& {* V( \% c1 i _禁止访问某些指定的目录:(可以用 <DirectoryMatch> 来进行正则匹配)- R# j& X }- L: _) o: J
( f0 u8 ]; c i. T( s<Directory ~ "^/var/www/(.+/)*[0-9]{3}"> 4 I" R0 z: p+ p$ g! x
Order allow,deny& Z' `+ N+ o5 h/ S% ~# W6 d4 H+ W0 U
Deny from all
- V) p3 s" h/ [+ Z5 W</Directory>3 c {% [# ~9 S0 L
. n4 n1 q4 S6 m. E, a' Y$ V+ R
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
$ q) c! S2 O: \# q' O' _, e<FilesMatch \.(?i:gif|jpe?g|png)$>1 P5 F8 t- ]/ H8 V
Order allow,deny9 o% T& i: O( n' B
Deny from all
9 t1 F5 d. b- p+ y1 B- o8 ]</FilesMatch> 5 s# E9 ~. o1 e/ y
7 K- R5 o1 W* T3 P9 _! i1 ~9 d针对URL相对路径的禁止访问:
8 K: O/ P& D" X* R5 I0 P" Z<Location /dir/>
7 G& t9 I G1 ?/ E Order allow,deny$ A: h/ v D2 `2 F# Z" X" ^6 _
Deny from all
N+ T$ x9 }7 _; |</Location> 0 B+ E( D' }" N1 H8 d* g3 s
. ^+ l/ D, @5 ?+ }5 i
针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:1 e( s p; A" `" l& G! z2 E
<Proxy http://cnn.com/*>
, u; R% k9 J2 d# B# u Order allow,deny
+ a2 t0 ~* x* L Deny from all
1 ?: g P& v( S' X</Proxy>
/ k! L0 p: |! u* K
2 d. B+ R1 F" U2. 禁止某些IP访问/只允许某些IP访问 ( \2 H$ j. C5 {7 J0 G
如果要控制禁止某些非法IP访问,在Directory选项控制:, i* r$ d7 E, I S
<Directory "/var/www/web/">
1 |. F7 D: q7 P: c. K9 ~$ S Order allow,deny J* @+ b8 [1 W: @
Allow from all
. Z- h4 o, I- u! h Deny from 10.0.0.1 #阻止一个IP2 b: T5 p0 G9 V! S1 ?$ \
Deny from 192.168.0.0/24 #阻止一个IP段
9 f1 d3 D0 x3 T! B0 K7 e2 P</Directory>
( E* ?* \3 j1 \1 } `- n+ ` R/ ?0 L' N
只允许某些IP访问,适合比如就允许内部或者合作公司访问:
( i! l% n) f7 _* N( A+ g7 u- h<Directory "/var/www/web/">
$ `1 R/ @) n/ G Order deny,allow
) s' y% { w% e. B- r$ a3 C/ |8 z Deny from all4 U' ^( w$ D& I1 [; |
All from example.com #允许某个域名8 U4 S5 W) I7 W( p
All from 10.0.0.1 #允许一个iP* m V& I* _( N0 \' j' L
All from 10.0.0.1 10.0.0.2 #允许多个iP
- B; l1 m7 I- v( b0 _ Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
" V! l' U2 _, P! i5 b& z6 H3 y7 y All from 10.0.1 192.168 #允许一个IP段,后面不填写* ^8 z) ]9 @: N3 T6 ~' e
All from 192.168.0.0/24 #允许一个IP段,网络号8 C b) [' U% N, B4 o
</Directory>
: _' `) l- }! f( E5 f" ?! A0 s% W( I7 } `
% Z7 [. `5 K5 m) I6 Y5 y5 SApache:解决办法;2 [" X3 A( N: r3 E/ w2 y" w
<Directory "/home/domain/public_html">, ?0 E. _ R5 }
Options -Indexes FollowSymLinks, j0 B/ Q" ~2 q; E L0 E
AllowOverride All2 P8 z! ^6 i+ L- }
<Files ~ ".txt">
. X: ~# ^ a- q4 K! K* g5 q' uOrder allow,deny0 S1 E; v/ |4 A7 s0 M+ C& ?1 r
Deny from all$ F* A. I( z9 k1 l% ?' D$ [! o
</Files>
: _! v. b0 a" e4 H1 S1 i A5 i</Directory> |
|