Messenger HTML - PHP - Controllo script

  • Creatore Discussione Creatore Discussione max_400
  • Data di inizio Data di inizio

max_400

Utente Attivo
23 Gen 2009
770
0
16
caltanissetta
max400.forumfree.it
pagina1

Codice:
<div align=center> 
<iframe name="ricezione2" src="deposito_messaggi.php" width=500 height=200></iframe>


<form  action="#" method="POST">
Nome: <input type="text" name="nome">
Messaggio: <input type="text" name="messaggio">
<input type="submit" value="invia messaggio">
</form>


<?
$nome=$_POST['nome'];
$messaggio=$_POST['messaggio'];

$nome = str_replace("<", "banana1", $nome);
$nome = str_replace(">", "banana2", $nome);
$messaggio = str_replace("<", "caffe1", $messaggio);
$messaggio = str_replace(">", "caffe2", $messaggio);

$var=fopen("deposito_messaggi.php","r");
$dim=filesize("deposito_messaggi.php");
$contenuto=fread($var,$dim);
 fclose($var);


$var=fopen("deposito_messaggi.php","w+");
 fwrite($var, "<font color=blue>$nome: </font>$messaggio <br /> $contenuto");
fclose($var);
?>


<a href="deposito_messaggi.php">vai alla pagina dei messaggi</a>
</div>

pagina 2 - "deposito_messaggi.php"

Codice:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control:  post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

Ciao ragazzi, è da molto che non mi occupo di php sto riprendendo adesso
ho la necessita di costruire una specie messenger per messaggi on-line

Volevo sapere se questo script è sicuro da infiltrazioni hacker
ho messo dei comandi per sostituire i simboli di < e >

str_replace

e poi se si può fare direttamente nel POST

Codice:
$nome=$_POST['nome'];
$messaggio=$_POST['messaggio'];

e qual è la sintassi corretta :book:

grazie.

au revoir
by max
 
Ehm... perché invece di sostituire i caratteri con termini improbabili non applichi le funzioni htmlspecialchars e addslashes?
PHP:
$nome = isset($_POST['nome']) ? addslashes(htmlspecialchars($_POST['nome'])) : '';
$messaggio = isset($_POST['messaggio']) ? addslashes(htmlspecialchars($_POST['messaggio']) : '';
 
Grazie Gighen... grazie Signor Gattino,

lo script del gatto mi sembra più breve e più facile da ricordare
comunque me li segno tutti e due.

La parola Strip non vuol dire per caso spogliare o spogliarello dei tag
una volta avevo un gioco Strip e poker dove una ragazza si spogliava ogni volta che perdeva una mano... una partita...

anzi guardando bene dal traduttore togliere tags :book:

Grazie onorevoli...
ma in ogni caso.... quello che avevo scritto io è sicuro?

Codice:
$nome=$_POST['nome'];
$messaggio=$_POST['messaggio'];

$nome = str_replace("<", "banana1", $nome);
....
o è meglio modificare in

Codice:
$nome = isset($_POST['nome']) ? addslashes(htmlspecialchars($_POST['nome'])) : '';
$messaggio = isset($_POST['messaggio']) ? addslashes(htmlspecialchars($_POST['messaggio']) : '';

oppure
Codice:
$messaggio=strip_tags($_POST['messaggio'], '<br><b>');
 
ehm... dottor gighen c'è un errore...

... manca una parentesi rotonda nella seconda riga verso la fine

in ogni caso ho corretto ma i simboli
Codice:
< >
vengono copiati ugualmente...

________

Per quanto riguarda il gatto... lo script funziona correttamente
i simboli citati prima non vengono visualizzati ma il grassetto si

tutto ok... :book:
 
Ultima modifica:
ciao
credo (ma di sicuro in questa vita c'è un'unica cosa sicura, e se arriva non t'importa più ne di php htm o altro)
comunque credo che il sistema di alex e quello del "gatto" si possano considerare equivalenti
tutto sta anche a cosa vuoi ritrovarti poi nel messaggio
es
stringa = <a href='.......' ....>pinco pallo
con alex ti ritrovi con
&gt;a href\'....\...&egt;pinco pallo
con il "gatto" dovresti trovare
pinco pallo
 
dottor gattino ma che cazzo scrivi?

non ci ho capito un ****.

Comunque il tuo script è ok ora vediamo di sistemare quello di gighen

un ultima cosa mi sono segnato i vostri script nel mio forum nella sezione PHP con lucchetto posso aggiungere i vostri nick?

poi esiste htmlentities del dottor sevenjeak che elimina tutti i tag html se non sbaglio
ho fatto una prova al volo e praticamente ricopia a pappagallo il tag del grassetto

in poche parole disattiva le funzioni dei tag ... giusto? :book:
 
Ultima modifica di un moderatore:
ciao
l'esempio voleva dire che se una stringa è fatta in quella maniera con i due metodi ti ritrovi o il primo o il secondo.
comunque da esempio di php-manual per strip_tags
PHP:
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

The above example will output:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
certo che puoi (gighen permettendo) casomai aggiungi dr gighen
 
ok... intanto ho provato questo script...

Codice:
<?php
$str = "Is your name O\'reilly?";

// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>

in pratica elimina la sbarra però non i simboli di minore e maggiore
bò... vedete un po voi ... che avete studiato... io sono ignorante
ho la 5a elementare e l'ho presa a pagamento ih ih ih


attendo risposta da gighen...
 
dimenticavo
in poche parole disattiva le funzioni dei tag
no non li disattiva li fa sparire dalla stringa restituendoti la stringa pulita dai tag e dal loro contenuto come ti ho fatto vedere nell'esempio

@alex
in che senso è terribile?
 
Ultima modifica:
Non è una cosa difficile da comprendere. Se hai questo script:
PHP:
<?php
$testo = '<p>Questo testo con i segni di maggiore e minore verrà purificato.</p>';
$testo = htmlspecialchars($testo);

echo $testo;
?>
L'output HTML sarà:
Codice:
&lt;p&gt;Questo testo con i segni di maggiore e minore verrà purificato.&lt;/p&gt;
Questo evita che qualche malintenzionato compia attacchi XSS, ma a video il risultato sarà esattamente lo stesso.
 
scusami signor gattino

ho preso il tuo script il primo che mi hai dato
e ho fatto una copia di tutto lo script in un altra cartella

e i simboli minore e maggiore la prima volta me li ha copiati
la seconda volta invece me li ha esclusi...

ho l'impressione che tutto lo script deve essere ricontrollato

Codice:
<div align=center> 
<iframe name="ricezione2" src="deposito_messaggi.php" width=500 height=200></iframe>


<form  action="#" method="POST">
Nome: <input type="text" name="nome">
Messaggio: <input type="text" name="messaggio">
<input type="submit" value="invia messaggio">
</form>


<?


$nome=strip_tags($_POST['nome'], '<br><b>');
$messaggio=strip_tags($_POST['messaggio'], '<br><b>');


$var=fopen("deposito_messaggi.php","r");
$dim=filesize("deposito_messaggi.php");
$contenuto=fread($var,$dim);
 fclose($var);


$var=fopen("deposito_messaggi.php","w+");
 fwrite($var, "<font color=blue>$nome: </font>$messaggio <br /> $contenuto");
fclose($var);
?>


<a href="deposito_messaggi.php">vai alla pagina dei messaggi</a>
</div>


nel file deposito_messaggi.php

Codice:
<font color=blue>max_400: </font>ciao  <br /> <font color=blue>: </font> <br /> <font color=blue>max_400: </font> <br /> <font color=blue>max_400: </font>provo a togliere minore e maggiore < > <br /> <font color=blue>: </font> <br /> <?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control:  post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

guarda bene quella riga
provo a togliere minore e maggiore < >

come vedi sono stati copiati... alì mortèè
 
ho provato dr. gighen

esattamente l'output che vedo io (ho firefox come browser)

Codice:
<p>Questo testo con i segni di maggiore e minore verrà purificato.</p>

in pratica copia a pappagallo i tag... e comunque va bene lo stesso...

lo posso scrivere nei miei appunti ossia il forum col tuo nick "gighen"?

tanto per ricordarmene in futuro
 
però.... applicato al mio lavoro non funziona... forse ho sbagliato qualkosa

Codice:
$nome = htmlspecialchars($_POST['nome']);
$messaggio=htmlspecialchars($_POST['messaggio']);

i simboli minore e maggiore me li copia... bò :book:
 
Infatti in questo modo i simboli minore e maggiore vengono copiati, solamente che lo script è sicuro perché sono convertiti nelle rispettive entità HTML e quindi sei al riparo da attacchi XSS. Non capisco... a te serve che vengano completamente eliminati o ti serve uno script sicuro?
 
dunque dunque... ho provato cosi...

Codice:
$nome = str_replace("<", "-", $_POST['nome']);
$nome = str_replace(">", "-", $_POST['nome']);
$messaggio = str_replace("<", "-", $_POST['messaggio']);
$messaggio = str_replace(">", "-", $_POST['messaggio']);


ed ecco il risultato...
1296042424.jpg


come vedete il simbolo di maggiore viene ricopiato o stesso
ho sbagliato qualkosa?
 

Allegati

  • ccccccccc.jpg
    ccccccccc.jpg
    62,2 KB · Visite: 287
Ultima modifica:
in questo modo funziona...

Codice:
<?
if(isset($_POST['ok'])){

$data_ora=date("d-m-y-G:i");

$nome = $_POST['nome'];
$messaggio = $_POST['messaggio'];

$nome = str_replace("<", "-", $nome);
$nome = str_replace(">", "-", $nome);
$messaggio = str_replace("<", "-", $messaggio);
$messaggio = str_replace(">", "-", $messaggio);

ho aggiunto data e ora più isset collegato al pulsante "invia messaggio"
per evitare la riga vuota iniziale

ecco il risultato stampato a video
1296043905.jpg


sta volta funziona ... :mavieni: entrambi i simboli <> vengono convertiti in trattini
ma sarà la forma corretta? :book:

Codice:
$nome = $_POST['nome'];
$messaggio = $_POST['messaggio'];

$nome = str_replace("<", "-", $nome);
$nome = str_replace(">", "-", $nome);


in particolare la riga
Codice:
$nome = $_POST['nome'];

avrei preferito in
Codice:
$nome = str_replace("<", "-", $_POST['nome']);

ma facendo cosi non funziona correttamente
 

Discussioni simili