Deschiderea fișierelor și a datelor externe

Deschideți fișierele și datele externe. Posibilă vulnerabilitate a scripturilor php

Funcțiile fopen, file, include și necesită deschiderea fișierelor de pe alte site-uri prin intermediul protocoalelor http și ftp. Această posibilitate are o potențială vulnerabilitate în script-urile php, ceea ce permite utilizarea site-ului ca proxy.

În Internetul în limba rusă, această vulnerabilitate practic nu era acoperită. Pe site-urile de securitate rusă, nu am putut găsi un raport direct cu privire la această vulnerabilitate.

Url fopen wrapper

CR / LF în cererile HTTP

Combinația dintre caracterele de retur și caracterele liniare în cererea HTTP separă anteturile. Detalii despre acest lucru pot fi găsite în articolul lui Anton Kalmykov "Generarea cererilor HTTP". Această combinație de caractere poate fi trecută în cererea GET ca "% 0D% 0A".

Pe multe site-uri, paginile sunt generate de un script de șablon. Scriptul redirecționează toate solicitările către site. Din REQUEST_URI se ia numele fișierului care urmează să fie deschis. Fișierul este citit, un șablon cu navigare, un capac etc. este adăugat la acesta. iar rezultatul este dat clientului.

Un programator non-sofisticat sau neexperimentat poate scrie cu ușurință un fișier deschis fără a verifica datele:

scriptul va executa o solicitare HTTP:

Ultimele trei linii ale scriptului sunt adăugate automat, dar cele două \ r \ n înaintea lor indică sfârșitul cererii. Astfel, un script neprotejat poate fi folosit ca server proxy. Cunoscând câteva site-uri "gălăgioase", un atacator poate construi un lanț de la ei, astfel încât să fie mai greu de găsit.

Exploatare inteligentă

(ar trebui să fie o singură linie) Modulul PHP se va conecta la serverul mail.example.com din portul 25 și va trimite următoarea solicitare:

Exploatarea măsurilor de protecție

În calitate de dezvoltator sau proprietar de site-uri web, este important să faceți tot posibilul pentru a vă asigura că nimeni nu poate trimite spam prin site-ul dvs. Dacă se întâmplă acest lucru, el va fi trimis de la un anumit dialup hawaian, al cărui proprietar nu înțelege limba umană, iar ultima vă poate face.

Verificarea istoricului interogărilor

Cea mai ușoară modalitate de a dezactiva o posibilă vulnerabilitate este să împiedicați deschiderea adreselor URL prin intermediul funcțiilor fișierelor. Dacă sunteți administratorul serverului dvs. - dezactivați permis_url_fopen în setările php. Dacă sunteți doar un client - interdicție locală. Fișierul .htaccess la rădăcina site-ului scrie o linie: php_value allow_url_fopen 0 Dacă sunteți un web hosting rău furnizor, puteți dezactiva URL-ul fopen înveliș pentru toți clienții care utilizează directiva php_admin_value. Activarea modului de siguranță (modul sigur) în acest caz nu ajută, funcția continuă să funcționeze corect.

Terminați lucrul cu o cerere în afara cererii

Un client care scanează site-ul pentru variabilele necontrolate creează trafic inutil și încarcă procesorul serverului. Este clar că nu are nevoie de paginile generate de site-ul dvs. dacă nu funcționează ca proxy. Este de dorit să omori astfel de solicitări înainte de a lansa interpretul php. Acest lucru se poate face cu modulul mod_rewrite. În fișierul .htaccess din rădăcina site-ului am pus această linie:

Se presupune că site-ul nu va fi trimis utilizând formularele metodelor GET cu intrări de utilizator multi-linie. În caz contrar, vor fi oprite de această regulă.