html injection

Poniamo il caso di avere delle variabili che possegono determinate quali REMOTE_ADDR, HTTP_REFERER ecc, tutte funzioni che vengono prese per forza di cose in input dallo script, un esmepio banale potrebbe essere questo:

<?php
    $a = getenv("HTTP_USER_AGENT");
    echo $a;
?>

Come potrei validare l'input di $a? come posso verificare che HTTP_USER_AGENT non contenga xss o vari exploit?

Io avevo tentato con scarso sucesso in questo modo:

<? if (eregi("%script%", $a)) { $code } else { $code } ?>

Qualche consiglio?

inviato 9 anni fa
DaD
DaD
1
X 0 X

Per ho ho risolto con htmlspecialchars() ma non sono molto soddisfatto a dir la verità  :'(

risposto 9 anni fa
DaD
DaD
1
X 0 X

Non c'è una risposta univoca alla tua domanda perché le tecniche di "pulizia" dell'input dell'utente dipendono da come poi devi impiegare tali dati, ad esempio in una query oppure li devi mostrare in una pagina html.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Non c'è una risposta univoca alla tua domanda perché le tecniche di "pulizia" dell'input dell'utente dipendono da come poi devi impiegare tali dati, ad esempio in una query oppure li devi mostrare in una pagina html.

 :bye:

Se io ad esempio volessi mettere l'USER_AGENT all'intenro di un file di log come potrei fare?

Poi altra domanda, anche l'ip potrebbe essere sottoposto a injection? cioè un controllo di questo tipo sarebbe utile?

<?php
     $r = $_SERVER['REMOTE_ADDR'];
     if (ereg("^(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]|[1-9]).)".
              "{1}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]).)".
              "{2}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]){1}))$",
               $r)
              ){ 
                           echo "IP ok: $r<br />";
     } else {

                           echo "IP no: $r<br />";
     }
?>

Quetso tipo di controllo potrei anche sottoporlo all'USER_AGENT ad esempio?

In caso positivo nel check della regexp cosa dovrei dirgli di cercare per verificare che l'header sia effetivamente un header e non uno script maligno?

risposto 9 anni fa
DaD
DaD
1
X 0 X

se devi scrivere qualcosa in un file di testo allora non ti serve alcun controllo, tanto i file di testo non sono degli eseguibili e non possono contenere degli script o simili...

L'IP non può essere modificato dall'utente perché è il webserver (Apache) a mettere a disposizione quella variabile al PHP.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

se devi scrivere qualcosa in un file di testo allora non ti serve alcun controllo, tanto i file di testo non sono degli eseguibili e non possono contenere degli script o simili...

L'IP non può essere modificato dall'utente perché è il webserver (Apache) a mettere a disposizione quella variabile al PHP.

 :bye:

Se io però inserissi le costanti all'interno di un file html potrei essere sottoposto ad un header injection, infatti gli aggressori servendosi delle variabili $_SERVER non controllate potrebbero mandare degli header contenenti xss o script di qual si voglia maniera, ed è per questo che sto cercando di checkare questo tipo di variabili.

Per l'ip ok grazie della delucidazione :)

risposto 9 anni fa
DaD
DaD
1
X 0 X
Se io però inserissi le costanti all'interno di un file html potrei essere sottoposto ad un header injection, infatti gli aggressori servendosi delle variabili $_SERVER non controllate potrebbero mandare degli header contenenti xss o script di qual si voglia maniera, ed è per questo che sto cercando di checkare questo tipo di variabili.

Mi sieghi come potrebbe avvenire un attacco di questo tipo se salvi lo USER_AGENT all'interno di un file di testo?  ???

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Se io però inserissi le costanti all'interno di un file html potrei essere sottoposto ad un header injection, infatti gli aggressori servendosi delle variabili $_SERVER non controllate potrebbero mandare degli header contenenti xss o script di qual si voglia maniera, ed è per questo che sto cercando di checkare questo tipo di variabili.

Mi sieghi come potrebbe avvenire un attacco di questo tipo se salvi lo USER_AGENT all'interno di un file di testo?  ???

 :bye:

Eseguendo ad esempio questo script in python

import urllib2


def urlopen(url,dat,ref,agent):
  req=urllib2.Request(url)
  req.add_header('Cookie','')
  req.add_header('User-Agent','%s'%agent)
  req.add_header('Referer','%s'%ref)
  req.add_data(dat)
  return urllib2.urlopen(req)

f = urlopen('sito',' ','<script> alert("xss")</script>','xss')
for i in f:
    print i

In questo modo nel file dove memorizzo le variabili non checkate possono essere sottoposti all'xss :(

P.S. Questo sempre quando salvo i log in html naturalmente, mi sono posto il problema perchè voglio poter salvare in tutta sicurezza i miei log anche in un formato non propriamente debito a questo tipo di operazioni.

risposto 9 anni fa
DaD
DaD
1
modificato 9 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda