防止网站被采集的理论分析以及十条方法对策

yizhihongxing

以下是“防止网站被采集的理论分析以及十条方法对策”的完整攻略。

1、理论分析

1.1 采集方式

网站被采集的方式非常多,常见的有以下几种:

  • 爬虫程序通过 URLs 或者搜索关键字进行遍历,抓取网站上的资源。
  • 通过采集插件,自动化脚本等方式,将网站上的信息通过 API 进行采集。
  • 通过监控网站 API 接口,抓取网站上的数据和内容。

1.2 采集特征

根据网站的特点和资源类型,一般采集特征有:

  • URL 特征。一些典型的 URL 参数、路径或者查询方式等,可能被爬虫所采集。
  • Cookie 特征。一些网站的登录状态、身份认证、网页缓存等信息,可能被爬虫程序所利用。
  • 频率特征。短时间内大量访问同一页面的用户,可能为爬虫程序。
  • 请求特征。一些网络请求的头部信息、请求参数等特征,可能被用于检测和拦截爬虫。

1.3 防护策略

为了提高网站的安全性和防止被采集,一般采用以下策略:

  • 限制爬虫。可以通过 robots.txt、User-Agent 和反爬机制等方式,限制或者防御爬虫访问。
  • 加密内容。可以通过 HTTPS、SSL 和加密算法等方式,保护数据的安全性。
  • 动态页面。可以通过 AJAX 等技术,实现动态页面,增加对爬虫的防御,提高极客门登录界面的安全性。
  • 频率和行为监测。可以通过 IP 的访问频率、行为分析等技术,检测和控制爬虫的采集。

2、十条方法对策

结合以上理论分析,我们具体了解下“防止网站被采集”的十条方法对策。

2.1 隐藏网站真实路径

为了防止爬虫利用 URL 的路径系统,这里我们充分利用 rewrite 和 htaccess 等功能来隐蔽真实路径。

# 将网站根目录的所有请求重定向到index.php文件中
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ index.php/$1 [L]

2.2 防浏览器批量获取

可以通过设置 Cookie 和 IP 等方式,防止恶意浏览器进行请求。

$user_agent = empty($_SERVER['HTTP_USER_AGENT']) ? '' : strtolower($_SERVER['HTTP_USER_AGENT']);

if($user_agent && !in_array($user_agent, ['chrome','firefox','safari'])){
  if(count($_COOKIE) == 0){
    // 如果 cookie 为空,并且没有被禁止,则生成一个 cookie,把其值存在 session 中
    // 禁止访问index.php页面
    setcookie('cookie_check', '1', time() + 3600, '/');
    $_SESSION['cookie_check'] = true;
  }
}

if (count($_COOKIE) > 0 || ($_COOKIE['cookie_check'] ?? '') != 1) {
  die(pageBadRequest());
}

2.3 预防 XSS 攻击

XSS 攻击是最为常见的攻击方式,可以通过过滤用户输入和转义输出两个层面来进行防御。

// 对一些敏感的字符进行转义,例如 ' " < > / \
function convertXSS($string) {
  return str_replace(['"', "'", '<', '>', '/'], ['&quot;', '&#39;', '&lt;', '&gt;', '&#x2F;'], $string);
}

// 过滤输入字符
$uname = trim(preg_replace('/[^-a-zA-Z0-9_]+/', '', $_POST['user_name']));
$pwd = convertXSS(trim($_POST['password']));

// 在页面输出时,对一些敏感字符进行转义
echo convertXSS($user_info);

2.4 防 SQL 注入

为了防止不良分子利用 SQL 注入漏洞,我们需要进行防御。

$user_id = addslashes($_GET['user_id']);
$query_user = "SELECT * FROM `user_info` WHERE `user_id` = '$user_id'";

2.5 防止 CSRF 攻击

为了防止 CSRF 攻击,我们需要在页面中添加防护代码。

token_get();
<!-- 防止 CSRF 攻击 -->
<?php if (isset($_SESSION['token'])): ?>
  <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<?php endif; ?>

2.6 用户注册

用户注册时,应该采取以下措施:

  • 及时发送邮件过来让用户进行验证
  • 发送短信验证码确认是否真实手机号
  • 要求用户限制密码长度和复杂度
  • 限制同一个 IP 注册次数

2.7 设置热链和下载限制

为了防止热链和不良下载,可以在 nginx 中设置防止盗链的配置。

location ~* \.(jpg|jpeg|gif|png)$ {
  valid_referers none blocked http://127.0.0.1;
  if ($invalid_referer) {
    return 403;
  }
}

2.8 HTTP 响应头设置

HTTP 响应头的设置也是一个比较好的防范手段,可以通过设置 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options 等字段来增加对可控内容的安全防护。

add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "SAMEORIGIN";

2.9 安全检测

对网站整体安全检测,常见的有网站安全监控、云 WAF、安全组等解决方案。

2.10 更新网站系统

最后,建议及时更新网站系统和插件,保证系统的稳定性和安全性。

示例说明

  • 示例1:网站开放数据 API 接口,遭爬虫攻击采集

可以通过限制 HTTP 请求头部信息,检测网站 IP 访问频率,以及通过 Captcha 强制校验,增加网站被采集的难度。

  • 示例2:网站出于商业目的,发布了部分限制区域访问的文章,遭到爬虫采集

可以通过网站后台配置 IP 白名单限制区域,HTTP 响应头中添加关于限制区域的信息,以及在网站防灌水工具中添加首次访问验证码等防范措施。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:防止网站被采集的理论分析以及十条方法对策 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS实现雨滴动画效果的实例代码

    在 CSS 中,我们可以使用动画效果来实现雨滴动画效果。下面是一个完整攻略,包含了如何使用 CSS 实现雨滴动画效果的过程和两个示例说明。 CSS 实现雨滴动画效果的过程 1. 使用伪元素和动画 我们可以使用伪元素和动画来实现雨滴动画效果。下面是一个示例: <div class="rain"></div> .rai…

    css 2023年5月18日
    00
  • 纯CSS实现“文本溢出截断省略”的几种方法

    下面我将为大家详细讲解“纯CSS实现文本溢出截断省略”的几种方法,包括单行文本截断和多行文本截断。 单行文本截断 方案一:利用text-overflow属性 /* 显示省略号 */ .ellipsis1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } 使用text-ove…

    css 2023年6月10日
    00
  • 不必需的样式脚本文件导致页面不能及时更新

    当我们在编写网页时,可能会引入各种样式和脚本文件。但是有些文件可能并不是必需的,如果这些文件发生了更改,但是我们并没有更新页面,那么这些更改就无法及时体现在网页上,这样会导致网页显示不完全或者显示错误。那么如何解决这个问题呢?以下是一些注意事项和解决方案: 注意事项 在引入样式和脚本文件时,尽量只引入必须的文件,避免引入不必要的文件; 如果引入了不必要的文件…

    css 2023年6月9日
    00
  • 五个2015 年最佳HTML5 框架

    关于这个话题,我可以详细讲解“五个2015年最佳HTML5框架”的完整攻略,以下是具体内容: 五个2015年最佳HTML5框架 什么是HTML5框架 HTML5框架是一个Web开发工具,是一种设计和开发Web页面的专业工具,可以帮助开发人员更快地构建现代化的Web应用程序。HTML5框架通常包含一组基于HTML、CSS、JavaScript的工具和库,能够以…

    css 2023年6月10日
    00
  • javascript 动态修改样式和层叠样式表代码

    下面是关于”javascript 动态修改样式和层叠样式表代码”的完整攻略。 1. 动态修改样式 a. 通过 DOM 直接修改样式 我们可以使用 querySelector 和 style 属性来直接选取并修改元素的样式。例如,通过以下代码可以将 ID 为 “example” 的元素的文本颜色修改为红色: const exampleElement = doc…

    css 2023年6月10日
    00
  • css对于字体和背景等属性的控制

    那么让我详细讲解一下如何使用CSS控制字体和背景等属性: 字体属性控制 要使用CSS控制字体属性,可以使用font-family、font-size、font-weight等属性,具体如下: font-family font-family属性可以设置字体的类型,一般情况下建议使用通用字体系列,以保证在各种设备上都能正确渲染,常用的通用字体系列包括:”sans…

    css 2023年6月9日
    00
  • PHP详细彻底学习Smarty

    PHP详细彻底学习Smarty 什么是Smarty Smarty 是一个 PHP 模板引擎,它允许我们将业务逻辑与样式相分离。通过 Smarty,我们可以在 HTML 页面中直接嵌入 PHP 代码。 Smarty 的一个主要功能是变量输出,我们可以从 PHP 脚本中向模板中传递变量,以供模板来渲染。此外,Smarty 还支持复杂的逻辑操作,例如 if-els…

    css 2023年6月9日
    00
  • JavaScript canvas实现字符雨效果

    接下来我将为大家详细讲解“JavaScript canvas实现字符雨效果”的完整攻略。 概述 字符雨(Matrix Rain)是指在计算机屏幕上出现了呈现字体效果的正随机竖条,需要时常刷新,也叫做“数字降雨”、“数字雨滴”。 在本篇攻略中,我们将介绍如何使用JavaScript和HTML5的Canvas元素一步一步实现字符雨效果。 前置技能 在开始编写字符…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部