-
ma brutto ereg...
allora come al solito il mio sito è attaccato dagli ufo o roba simile...
io non so come mai alcume volte l'ereg funziona e altre no... :evil:
io ho bisogno che faccia questo...
se il campo è di soli numeri e lettere (no spazio) lo richiamo con $SGET
se il campo è di numeri, lettere, spazio, @, punto, due punti, punto e virgola, virgola, _, -, àèéòìù, &, !, #, lo richiamo con $SGETSpec
altrimenti restituisce un errore... tipo un alert js...
io lo avevo fatto ma poi ho modificato il tutto, sembrava funzionare a puntino, ma alcune volte non funziona... qualcuno saprebbe scrivermi l'espressione che dovrei usare con ereg?
grazie... :grin:
-
Allora, iniziamo con lettere e numeri.
La sintassi per ereg e' "^[[:alnum:]]$"
Per cui:
Codice PHP:
if (ereg("^[[:alnum:]]$", $variabile)) {
$SGET = $variabile;
}
Per il resto, dovrebbe essere "^[A-Za-z0-9@\.:;,\-_&!#]$" ma non ne sono mica sicuro.
Fai un po' di prove e vedi se funziona, perche' forse bisogna "Escappare" (blah che neologismo assurdo che mi e' uscito) un po' di cose.
:wink:
-
ah, quindi i caratteri àèéòìù sono compresi nelle lettere, non vengono trattati come caratteri a parte... va be adesso provo... grazie per adesso...
-
Credo, te l'ho detto non so.
Comunque mi trovi qui (o in pvt): tienimi informato che c'e' sempre da imparare con le espressioni regolari :grin:
-
non mi accetta questo carattere -
-
a me serve controllare i dati che immettono... quindi mi serve ereg... non accetta soltanto il -... come posso fare?
-
Mettilo come primo carattere della lista:
^[-A-Za-z0-9@\.:;,_&!#]$
Altrimenti puoi sempre specificare i codici ascii di ogni carattere. Funziona persino con il sistema unicode (io lo usavo per riconoscere lettere arabe, che sono sopra l'ascii 1530)
Se non funziona come ti ho detto ti cerco la sintassi per i codici ascii :wink:
-
adesso sembra funzionare... ma come faccio a mettergli anche gli accapo? cioè se un testo va a capo non me lo passa... mi da errore... che modifiche devo fargli?
-
http://www.regularexpressions.info/reference.html
\n e \r mentre \t per il tab.
Non voglio assolutamente polemizzare, ma se ogni volta che comlichiamo l'espressione poi ti viene in mente che vuoi aggiungerci ancora qualcosa, non potresti fare un'espressione al contrario?
Invece che riconoscere le 100 cose che vuoi che siano presenti, perche' non provi a fargli riconoscere le 4 o 5 cose che non vuoi che ci siano?
Ad ogni modo si puo' fare quasi tutto con ereg, quindi se quella che vuoi e' un'espressione che riconosca tutte queste cose, piano piano la componiamo :wink:
-
si, sarebbe molto più facile, e allora come facciamo a fare al contrario? :lolloso:
-
Se abbiamo finito con i ritorno a capo non hai piu' da modificare niente, altrimenti inizia a fare una lista dei caratteri che NON vuoi.
-
allora non voglio xkè sono dispettosi:
'
$
|
mi sa che se facevamo così da subito ci risparmiavamo molti grattacapi...
ps: non è che mi faresti un txt mettendomi i caratteri che posso includere e in che modo li devo scrivere... ho provato http://www.regularexpressions.info/ ma non ci ho capito molto :lolloso: tnx
-
anzi, quali sono i caratteri pericolosi (sql injection)? così li levo...
-
Per la sql injection sono pericolosi molti piu' caratteri, inoltre non c'e' mica solo la sql come injection.
Diciamo ad esempio (ma non sono sicuramente tutti):
: / \ ' " ( ) { } - > < ? $ % |
personalmente tendo a restringere i parametri a puro testo, usando l'espressione ^[[:alnum:]]$
Esclusi ovviamente i parametri in POST che possono contenere ad esempio testi formattati (e quindi contenenti anche punteggiatura e altre cose).
Se vuoi fare una prova di javascript-injection, scriviti una pagina tipo:
Codice PHP:
<?php
echo "Ciao $_GET[nome] !";
?>
e poi prova a passargli ?nome=javascript:alert(document.compatMode);
-
-
comunque come funziona l'ereg al contrario? dove metto i dati che non voglio?
-
Sorry errore mio: intendevo passagli
?nome=<script>javascript:alert(document.compatMode );</script>
io il javascript non lo so tanto bene.
Se devi riconoscere anche solo un'occorrenza di un carattere ti serve una sintassi un po' diversa: ora sono di fretta ma appena posso ci studio, altrimenti prova ad usare quella fatta fin'ora (a proposito: funziona?)
Puoi anche fare un'altra cosa: invece che usare ereg puoi usare ereg_replace e sostituire tutti i caratteri "pericolosi" con qualcosa di innocuo. Il bello e' che ti basta fare due array tipo:
Codice PHP:
$a[0] = "\";
$b[0] = "barra";
$a[1] = "\ " ";
$b[1] = "virgolette";
e poi passarli a ereg_replace e lui scorrera' in parallelo gli array sostituendo ad ogni occorrenza di $a[0] il contenuto di $b[0] ecc...
io lo uso per convertire il bbcode :wink:
-
ah, interessante adesso provo.... quindi faccio un ereg_replace quando mettono i dati e ad esempio ' lo trasformo in § e poi quando lo tiro fuori dal db lo faccio al contrario da § a '.... bhe bella pensata adesso provvedo a scrivermi il codicino ad hoc... :lolloso:
-
Puoi anche semplicemente convertirli nelle rispettive entities :wink:
-
in che senso? parla come mangi :lolloso:
-
Convertire ad esempio:
" :arrow: &# 34;
' :arrow: &# 39;
Vedi qui: http://www.w3schools.com/html/html_asciiref.asp
-
Puoi usare anche la semplice funzioncina strtr
Codice:
<?php
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>
E ti scambia tutte le occorrenze definite nell'array $trans.
-
grazie per il consiglio... adesso provo... :lolloso:
-
ma non c'è qualche funzione che converta automaticamente questi caratteri in catatteri innoqui? :lolloso:
-
come posso fare a farglielo fare in automatico quando faccio una query al db?
-
Creati una funzione che restituisca la stringa di partenza "ripulita" dei caratteri malevoli.
Poi, se hai un array, puoi usare la funzione array_map() che consente di applicare una funzione (anche scritta da te) a tutti gli elementi di un array.
-
come posso farla... non riesco a capire come combinare il codice... :lolloso:
-
Allora, fino a scrivere una funzione che restituisca la stringa "pulita" ci sei?
Qualcosa che funzioni tipo:
$pulita = ripulisci($originale);
Ora, se hai i dati in un array, tutto quello che devi fare e' scrivere:
$array_pulito = array_map('ripulisci', $array_originale);
Ad esempio lo puoi usare per l'array $_GET o $_POST o quello che ti pare.
-
quindi la funziona verrebbe così?
Codice PHP:
function coverti_sicurezza($valore) {
$valore_pulito = htmlentities($valore);
return $valore_pulito;
}
funcition riconverti_sicurezza($valore) {
$valore_sporco = html_entity_decode($valora);
return $valore_sporco;
}
e poi
Codice PHP:
$array_pulito = array_map('converti_sicurezza', $array_originale);
$array_sporco = array_map('riconverti_sicurezza', $array_originale);
così?
-
Esatto! :mrgreen:
Sto andando a memoria ma mi pare proprio cosi' :wink: