Rumah pembangunan bahagian belakang tutorial php 机器多次恶意提交攻击简单防范

机器多次恶意提交攻击简单防范

Jul 29, 2016 am 09:07 AM
amp interval ip session

先说背景:机器不断的发送请求或者恶意提交,会给服务器造成很大压力;针对这种攻击最优的策略是判断提交次数,产生动态验证码,即判断ip规定时间内重复发送达到N次弹出验证码。下面是小拽在实践过程中一个简单的识别ip,利用session记录和防御的过程。

识别和校验ip

过程如下;

  • 识别ip

  • ip属于白名单直接通过[白名单策略:内网ip+指定ip表]

  • 利用session存储ip的请求时间戳

  • 校验规定时间内ip的请求次数

  • 采取相应的措施

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<code>/**

 * 获取和校验ip;同时防止短时间内多次提交

 *

 * @notice        :弹出验证码,需要替换掉echo $echo_str 即可。

 * @return string :返回校验成功的ip

 */

protected function getAndCheckIP()

{

 

    // 获取环境ip

    if (getenv("HTTP_CLIENT_IP") &amp;&amp; strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

        $ip = getenv("HTTP_CLIENT_IP");

    else if (getenv("HTTP_X_FORWARDED_FOR") &amp;&amp; strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

        $ip = getenv("HTTP_X_FORWARDED_FOR");

    else if (getenv("REMOTE_ADDR") &amp;&amp; strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

        $ip = getenv("REMOTE_ADDR");

    else if (isset($_SERVER['REMOTE_ADDR']) &amp;&amp; $_SERVER['REMOTE_ADDR'] &amp;&amp; strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

        $ip = $_SERVER['REMOTE_ADDR'];

    else

        $ip = "unknown";

 

    // check 环境ip

    if (!$this-&gt;isWhiteList($ip)) {

        $echo_str = "提交过于频繁,请稍后再试!";

        // 构建ip的时间栈数据

        if (!is_array($_SESSION[$ip])) {

            $_SESSION[$ip] = array();

        }

 

        if (isset($_SESSION[$ip][0])) {

            $_SESSION[$ip][] = time();

 

            // session 保存时间为6小时。清理session

            $post_interval_first = time() - $_SESSION[$ip][0];

            if ($post_interval_first &gt; 21600) {

                $_SESSION[$ip] = array();

            }

 

            // 两次提交小于1s,禁止提交

            $post_interval_pre = time() - $_SESSION[$ip][count($_SESSION[$ip]) - 3];

            if ($post_interval_pre </code>

Salin selepas log masuk

白名单策略

白名单策略采用:内网ip放行和特定ip放行

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<code>/**

 * 检验是否存在于白名单中

 *

 * @param $ip    :校验的ip

 * @return bool  :校验结果

 */

function isWhiteList($ip){

    /**

     * 内网ip默认全部存在于白名单中

     */

    if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)){

        return true;

    }

 

    // 是否在写死的whitelist 里面

    return in_array($ip,$this-&gt;_WHTTE_LIST);

}

</code>

Salin selepas log masuk

防攻击策略

小拽采用的比较简单的策略,如上面代码,实际过程中可以结合业务需求。

  • 1s内禁止重复提交

  • 5s内提交上限3次

  • 60s内提交上限5次

  • 6小时内提交上限10次

【转载请注明:机器多次恶意提交攻击简单防范 | 靠谱崔小拽 】

以上就介绍了机器多次恶意提交攻击简单防范,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah tapak web menetapkan sekatan IP hitam/senarai putih dan sekatan akses IP negara dan bandar melalui nginx? Bagaimanakah tapak web menetapkan sekatan IP hitam/senarai putih dan sekatan akses IP negara dan bandar melalui nginx? Jun 01, 2023 pm 05:27 PM

Bagaimanakah tapak web menetapkan sekatan IP hitam/senarai putih dan sekatan akses IP negara dan bandar melalui nginx?

Bagaimana untuk menyemak alamat IP pada WeChat Bagaimana untuk menyemak alamat IP pada WeChat May 31, 2023 am 09:16 AM

Bagaimana untuk menyemak alamat IP pada WeChat

Bagaimana untuk menyelesaikan kegagalan sesi Bagaimana untuk menyelesaikan kegagalan sesi Oct 18, 2023 pm 05:19 PM

Bagaimana untuk menyelesaikan kegagalan sesi

Penyelesaian kepada masalah merentas domain Sesi PHP Penyelesaian kepada masalah merentas domain Sesi PHP Oct 12, 2023 pm 03:00 PM

Penyelesaian kepada masalah merentas domain Sesi PHP

Bagaimana untuk menetapkan senarai putih direktori dan senarai putih ip dalam nginx Bagaimana untuk menetapkan senarai putih direktori dan senarai putih ip dalam nginx May 18, 2023 pm 03:52 PM

Bagaimana untuk menetapkan senarai putih direktori dan senarai putih ip dalam nginx

Pertanyaan alamat IP tempatan Pertanyaan alamat IP tempatan Jan 05, 2024 pm 01:42 PM

Pertanyaan alamat IP tempatan

Apakah yang perlu saya lakukan jika wifi saya tidak menunjukkan peruntukan IP? Apakah yang perlu saya lakukan jika wifi saya tidak menunjukkan peruntukan IP? Aug 30, 2023 am 11:58 AM

Apakah yang perlu saya lakukan jika wifi saya tidak menunjukkan peruntukan IP?

Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis Jun 03, 2023 pm 03:11 PM

Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis

See all articles