Vulnerabilità PHP sprintf?

3

Su alcuni siti come WriteCodeOnline, sprintf , vsprintf e altre funzioni stringa formattate correlate sono disabilitate per ragioni di sicurezza:

Warning: vsprintf() has been disabled for security reasons on line 1

Mi chiedo quali sono questi motivi di sicurezza. Ho già letto l'articolo di Wikipedia su Stringa di formato incontrollata , ma affronta solo gli aspetti dell'utilizzo di printf in C.

Quali sono i problemi di sicurezza nell'esecuzione di *printf su PHP? Ovviamente la funzione non è pensata per prevenire le iniezioni SQL, ma si tratta di utilizzare lo strumento corretto per il lavoro.

    
posta rink.attendant.6 11.10.2014 - 20:41
fonte

2 risposte

5

Sì, non è linguaggio C / C ++; tuttavia, perl, PHP, ruby e java sono discendenti che portano avanti varie convenzioni del linguaggio C. Non avendo% n, php elimina una parte del problema, ma ha ancora% x che può essere sfruttato in determinate circostanze.

In sostanza, printf() e le sue varianti possono consentire il controllo della stringa di formato se non lo specifichi .

L'input utente non convalidato può fornire la stringa di formato di loro scelta che porterà a una condizione di overflow del buffer (non un vero buffer overflow).

Modern perl e PHP genereranno avvertimenti durante la fase di sviluppo in modo da non creare codice mancante della stringa di formato, se si sceglie di ignorarli, si può avere un problema.

Poiché il sito a cui fai riferimento ti permette di inserire qualsiasi vecchia cosa dannata per testare il codice, impediscono l'inserimento di stringhe in formato creativo in printf() che possono consumare memoria, creare un attacco denial of service, causare un programma prematuro terminare o arrestare l'interprete PHP su quel sito .

Vulnerabilità della stringa di formato in C

    
risposta data 11.10.2014 - 22:57
fonte
1

Non in senso tradizionale, poiché lo sprintf di PHP non supporta nessuna delle conversioni veramente pericolose come% n. Una stringa di formato controllata dall'utente può ancora causare un caos limitato (si consideri% 99999999s), ma il peggiore, potrebbe essere consumare memoria e tempo.

il seguente è un overflow intero. Che porta al seguente codice: -

<?php
echo sprintf('%2147483646$s', "foo"); # Warning: Too few arguments
echo sprintf('%2147483647$s', "foo"); # Warning: Argument number must be greater than zero

PHP Bug # 61531

    
risposta data 08.09.2017 - 10:11
fonte

Leggi altre domande sui tag