Door Anoniem: Waard om door te nemen
https://paragonie.com/quick-answersEr is meer aan de hand rond PHP beveiliging, dan men meestal op het eerste oog aannemen wil.
Als 'SELECT 'evil code here' INTO OUTFILE '/var/www/reverse_shell.php' lukt onder bepaalde omstandigheden,
kan er sprake zijn van een complete overname van de server.
SQL, LDAP, OS Command, en XPath Injectie techniken blijven in de top tien staan.
Input, input en nog eens input opschonen is het devies.
Een beetje php-programmeur zal een dergelijke query nooit zo gebruiken.
Allereerst schrijf je de output weg naar een php-file, die ook nog eens vanaf het web benaderbaar is. Nooit doen!
Ten tweede ga je ervan uit dat wat na SELECT komt door gebruikersinput wordt gevormd. Nooit doen! Kolomnamen horen niet uit gebruikersinput te komen. Dat geldt ook voor het pad + filename.
Verder, gebruik op z'n minst mysqli i.p.v. mysql, daarmee is sql-injection zo goed als onmogelijk. Let daarbij op dat wat je met prepare naar de server stuurt nooit gebruikersinput bevat. Die koppel je met bind_param.
Wat betreft de pollvraag, hetzelfde verhaal als hierboven: een beetje php-programmeur zal dit nooit op deze manier in z'n code opnemen.
Het ip-adres dat via GET binnenkomt hoort op z'n minst gevalideerd te worden. Dat kan als volgt:
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) != '') ... dan pas pingen.
Daarbij is het altijd verstandig om POST- en GET-parameters vooraf te controleren met isset() en in een variable te zetten. Dus zoiets:
$ip = isset($_GET['ip']) ? $_GET['ip'] : '';
Aan de andere kant vraag ik me af waarom er gepingd moet worden naar een host die door de bezoeker wordt opgegeven. Een onnodig risico.