PHP站点日常防护:系统、nginx、PHP、mysql
<h3>PHP安全加固:</h3>1、防跨目录设置:<br />
在网站根目录建立 .user.ini文件:open_basedir=/www/wwwroot/ip110.net/:/tmp/<br />
<br />
2、网站目录权限去掉写权限,可以设置为555<br />
<br />
3、必选:<br />
利用nginx对站点非运行php目录进行屏蔽,防止访问上传的木马文件。
<pre style="margin-left:40px">
location ~* ^/(data|images|config|static|template)/.*\.php$
{
return 444; #444 断开连接的状态码,deny all;#403依然占用带宽
}
防止以.为开头的文件的访问
location ~* ^\..*?$
{
return 444; #444 断开连接的状态码,deny all;#403依然占用带宽
}
</pre>
<p>4、禁用PHP高危函数,以aaPanel为准。</p>
<h3>nginx防攻击</h3>
<span style="color:#e74c3c"><strong>1、限制请求率:</strong></span>
<pre>
只能发出一个请求。允许单个客户端IP地址每2秒尝试登录(相当于每分钟30个请求):
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;#此句要写在http段不能写在server段内
server {
# ...
location /login.html {
limit_req zone=one;
}
}
该 limit_req_zone 指令配置一个名为“one”的共享内存区域,用于存储指定密钥的请求状态,在本例中为客户机IP地址($binary_remote_addr)</pre>
<p><span style="color:#e74c3c"><strong>2、限制连接数:</strong></span></p>
<pre>
limit_conn_zone $binary_remote_addr zone=addr:10m;#此句要写在http段不能写在server段内
server {
# ...
location /store/ {
limit_conn addr 10;
# ...
}
}
</pre>
<p><strong>3、关闭慢连接:</strong></p>
<pre>
server {
client_body_timeout 5s;
client_header_timeout 5s;
# ...
}</pre>
<p><br />
<strong>4、列入IP黑名单:</strong><br />
location / {<br />
deny 123.123.123.5;<br />
}<br />
注:个人感觉不如加入hosts.deny或者系统防火墙<br />
</p>
<p><strong>5、禁用所有不需要的 HTTP 方法</strong></p>
<p>禁用所有不需要的 HTTP 方法,下面设置意思是只允许 GET、HEAD、POST 方法,过滤掉 DELETE 和 TRACE 等方法。</p>
<pre>
location / {
limit_except GET HEAD POST { deny all; }
}
</pre>
<p>另一种方法是在 server 块 设置,不过这样是全局设置的,要注意评估影响</p>
<pre>
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
</pre>
<p><br />
<strong>6、 防止Host头攻击</strong></p>
<p>添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。</p>
<pre>
server {
listen 80 default;
server_name _;
location / {
return 403;
}
}</pre>
<p><br />
<strong>7、防止图片盗链</strong></p>
<p>图片或HTML盗链的意思是有人直接用你网站的图片地址来显示在他的网站上。最终的结果,你需要支付额外的宽带费用。这通常是在论坛和博客。我强烈建议您封锁,并阻止盗链行为。</p>
<pre>
location /images/ {
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
return 403;
}
}
</pre>
<p>例如:重定向并显示指定图片。</p>
<pre>
valid_referers blocked www.example.com example.com;
if ($invalid_referer) {
rewrite ^/images/uploads.*.(gif|jpg|jpeg|png)$ http://www.examples.com/banned.jpg last
}</pre>
<p> </p>
<p><strong>8、配置合理响应头</strong></p>
<p>为了进一步加强 Nginx web 的性能,可以添加几个不同的响应头 X-Frame-Options 可以使用 X-Frame-Options HTTP 响应头指示是否应允许浏览器在 <frame> 或 <iframe> 中呈现页面。 这样可以防止点击劫持攻击。 配置文件中添加:</p>
<pre>
add_header X-Frame-Options "SAMEORIGIN";
</pre>
<p>Strict-Transport-Security HTTP Strict Transport Security,简称为 HSTS。它允许一个 HTTPS 网站,要求浏览器总是通过 HTTPS 来访问它,同时会拒绝来自 HTTP 的请求,操作如下:</p>
<pre>
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
</pre>
<p>CSP Content Security Policy (CSP) 保护你的网站避免被使用如 XSS,SQL注入等手段进行攻击,操作如下:</p>
<pre>
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
</pre>
<p>服务用户提供的内容时, 包含 X-Content-Type-Options: nosniff 头选项,配合 Content-Type: 头选项, 来禁用某些浏览器的 content-type 探测.</p>
<pre>
add_header X-Content-Type-Options nosniff;
</pre>
<p>X-XSS-Protection: 表示启用XSS过滤(禁用过滤为X-XSS-Protection: 0),mode=block表示若检查到XSS攻击则停止渲染页面</p>
<pre>
add_header X-XSS-Protection "1; mode=block";</pre>
系统加固:<br />
1、linux安装fail2ban、DDOS Deflate<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Mysql加固:<br />
1、必选:mysql用户名对应的host必须为localhost或者127.0.0.1;并且mysql最好设置bind=127.0.0.1防止站外连接操作mysql数据库。<br />
2、必选:使用系统防火墙禁用掉mysql、redis、mongodb等不必要的端口,只保留一些必要的对外端口如:80, 443等。
页:
[1]