杰克工作室 发表于 2023-3-8 16:17

PHP站点日常防护:系统、nginx、PHP、mysql

<h3>PHP安全加固:</h3>
1、防跨目录设置:<br />
&nbsp; &nbsp; &nbsp;在网站根目录建立 .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$
{
&nbsp; &nbsp; return 444; #444 断开连接的状态码,deny all;#403依然占用带宽
}

防止以.为开头的文件的访问
location ~* ^\..*?$
{
&nbsp; &nbsp; return 444; #444 断开连接的状态码,deny all;#403依然占用带宽
}
</pre>

<p>4、禁用PHP高危函数,以aaPanel为准。</p>

杰克工作室 发表于 2024-3-9 20:25

<h3>nginx防攻击</h3>
<span style="color:#e74c3c"><strong>1、限制请求率:</strong></span>

<pre>
只能发出一个请求。允许单个客户端IP地址每2秒尝试登录(相当于每分钟30个请求):
limit_req_zone $binary_remote_addr zone=one:10m&nbsp;rate=30r/m;#此句要写在http段不能写在server段内
server {

# ...
&nbsp;location /login.html {
&nbsp; limit_req zone=one;
&nbsp;}
}
该 limit_req_zone 指令配置一个名为&ldquo;one&rdquo;的共享内存区域,用于存储指定密钥的请求状态,在本例中为客户机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 {
# ...
&nbsp;location /store/ {
&nbsp; limit_conn addr 10;
# ...&nbsp;
&nbsp;}
}
</pre>

<p><strong>3、关闭慢连接:</strong></p>

<pre>
server {
&nbsp;client_body_timeout 5s;
&nbsp;client_header_timeout 5s;
# ...
}</pre>

<p><br />
<strong>4、列入IP黑名单:</strong><br />
location / {<br />
&nbsp;&nbsp; &nbsp;deny 123.123.123.5;<br />
}<br />
注:个人感觉不如加入hosts.deny或者系统防火墙<br />
&nbsp;</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>&nbsp;</p>

<p><strong>8、配置合理响应头</strong></p>

<p>为了进一步加强 Nginx web 的性能,可以添加几个不同的响应头 X-Frame-Options 可以使用 X-Frame-Options HTTP 响应头指示是否应允许浏览器在 &lt;frame&gt;&nbsp;或 &lt;iframe&gt;&nbsp;中呈现页面。 这样可以防止点击劫持攻击。 配置文件中添加:</p>

<pre>
add_header X-Frame-Options &quot;SAMEORIGIN&quot;;
</pre>

<p>Strict-Transport-Security HTTP Strict Transport Security,简称为 HSTS。它允许一个 HTTPS 网站,要求浏览器总是通过 HTTPS 来访问它,同时会拒绝来自 HTTP 的请求,操作如下:</p>

<pre>
add_header Strict-Transport-Security &quot;max-age=31536000; includeSubdomains; preload&quot;;
</pre>

<p>CSP Content Security Policy (CSP) 保护你的网站避免被使用如 XSS,SQL注入等手段进行攻击,操作如下:</p>

<pre>
add_header Content-Security-Policy &quot;default-src &#39;self&#39; http: https: data: blob: &#39;unsafe-inline&#39;&quot; 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 &quot;1; mode=block&quot;;</pre>

杰克工作室 发表于 2024-3-9 20:38

系统加固:<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]
查看完整版本: PHP站点日常防护:系统、nginx、PHP、mysql