codice sicurezza con calcolo matematico

Salve,

Mi potete aiutarmi ad creare un codice di sicurezza con matematico

Mi spiego meglio , l'utente che accede al form deve calcolare 20+30 ed dare il risultato giusto.

Ed quando il risultato è giusto (quindi 50 passa al'azione coretta).

per ora ho realizzato questo codice:

<?php
$valore1 = 20;
$valore2 = 30;
$uguale = $valore1 + $valore2;
?>
<form name="form_esempio" action="calcolo.php">
<input name="valore1" type="text" size="2" readonly="true" value="<?php echo $valore1 ?>"> +
<input name="valore2" type="text" size="2" readonly="true" value="<?php echo $valore2 ?>">
Scrivi il risultato:
<input name="ugualeHuman" type="text" size="2">
<input name="uguale" type="hidden" size="3" value="<?php echo $uguale ?>">
<input name="Submit" type="submit"   value="Submit">
</form>

però voglio che nel secondo file.php.

viene cosi:

if()

Inizio processo

else

Codice Matematico errato

ha dimenticavo il calcolo da calcolare vengono random.

idee?

grazie.

inviato 8 anni fa
luigi
modificato 8 anni fa
X 0 X

if($_POST['valore1] + $_POST['valore2] == $_POST['ugualeHuman']) ...

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok.

ho fatto una prova:

calcolo.php:

<?

$valore1 = 20;

$valore2 = 30;

$uguale = $valore1 + $valore2;

?>

<form name="form_esempio" action="test.php">

<input name="valore1" type="text" size="2" readonly="true" value="<?php echo $valore1 ?>"> +

<input name="valore2" type="text" size="2" readonly="true" value="<?php echo $valore2 ?>">

Scrivi il risultato:

<input name="ugualeHuman" type="text" size="2">

<input name="uguale" type="hidden" size="3" value="<?php echo $uguale ?>">

<input name="Submit" type="submit"   value="Submit">

</form>

pagina test.php

<?php

if($_POST['valore1'] + $_POST['valore2'] == $_POST['ugualeHuman'])

{

echo "Passato";

}else{

?>

<?

echo "Non coretto";

}

?>

Come mai mi dice sempre passato.

ed poi come faccio ad fare random valore1 e valore2?

grazie.

risposto 8 anni fa
luigi
X 0 X

cambia il form così:

<form name="form_esempio" action="test.php" method="post">

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok,

grazie funziona.

Un'altra cosa come faccio fare al valore1 e valore2 fare che cambino tutte le volte che accede al form?.

tipo una cosa Random.

grazie.

risposto 8 anni fa
luigi
X 0 X

ok.

trovato: rand()

però mi vengono  numeri enormi tipo: 14740

come posso fare che vengono 2 o 3.

ad esempio: da 1 a 100.

grazie.

risposto 8 anni fa
luigi
X 0 X
rand  (0, 100);

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grande, gianni.

Vi posto il codice completo che si può migliorare...

calcolo.php

<?

$valore1 = rand  (0, 100);

$valore2 = rand  (0, 100);

$simbol = "+";

$uguale = "".$valore1."".$simbol."".$valore2."";

?>

<form name="form_esempio" action="test.php" method="post">

<input name="valore1" type="text" size="2" readonly="true" value="<?php echo $valore1 ?>">

<input name="simbol" type="text" size="2" readonly="true" value="<?php echo $simbol ?>">

<input name="valore2" type="text" size="2" readonly="true" value="<?php echo $valore2 ?>">

Scrivi il risultato:

<input name="ugualeHuman" type="text" size="2">

<input name="Submit" type="submit"   value="Submit">

</form>

Pagina di test

<?php

if($_POST['valore1'] + $simbol + $_POST['valore2'] == $_POST['ugualeHuman'])

{

echo "Passato";

}else{

?>

<?

echo "Non coretto";

}

?>

Come si può migliorare questo anti-spam?.

grazie.

risposto 8 anni fa
luigi
X 0 X

nessuno?..

mi potete dire come faccio venire random i + / - ?.

grazie.

risposto 8 anni fa
luigi
X 0 X

il + e - puoi ottenerli con un rand(0,1) associando allo 0 il + e all'uno il -

comunque quel controllo non è affatto antispam perché è facilmente aggirabile, in quanto gli operandi dell'operazione (somma o differenza) vengono memorizzati nella pagina web e quindi possono essere manipolati a piacere.

In pratica l'utente (o un sistema automatico) non è costretto a fare l'operazione che gli hai proposto, tanto i gli operandi se li sceglie come vuole. La conferma viene dal fatto che il codice che effettua il controllo prende sia gli addendi che il risultato da $_POST, ovvero dall'utente.

Un primo passo verso la realizzazione di un vero controllo antispam sarebbe quello di mettere gli operandi in sessione.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

si, hai ragione.

Pensavo anche io alle sessioni, ma sono alle prime armi con il php.

Se provo ad levare queste righe di codice:

<input name="valore1" type="text" size="2" readonly="true" value="<?php echo $valore1 ?>">

<input name="simbol" type="text" size="2" readonly="true" value="<?php echo $simbol ?>">

<input name="valore2" type="text" size="2" readonly="true" value="<?php echo $valore2 ?>"

e le metto nelle sessioni. come fa un pò capcha.

può andare meglio?.

Mi poi fare un'esempio?.

grazie.

risposto 8 anni fa
luigi
X 0 X

Gli addendi vanno mostrati, ma non in campi input ma come semplici testi nella pagina HTML. Gli addendi vanno poi messi in sessione e lo script che controlla la somma deve prendere gli addendi dalla sessione e la somma da POST.

Se vuoi delle delucidazioni sull'uso delle sessioni vedi qui:

http://www.phpnews.it/articoli/php/le-sessioni/

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Gli addendi vanno mostrati, ma non in campi input ma come semplici testi nella pagina HTML.

 :bye:

infatti è quello che voglio fare.

hai qualche esempio?.

Ora mi leggo l'articolo sulle sessioni.

poi ti faccio sapere.

risposto 8 anni fa
luigi
X 0 X

gianni, rieccomi di nuovo ...

mi protesti fare un favore grandissimmooo,

perchè ho letto l'articolo ma non ci ho capito niente.

me lo protesti farlo tu?... e poi lo condivido con tutta la community di php.

Grazie.

risposto 8 anni fa
luigi
X 0 X

E' solo una bozza, ma dovrebbe essere sufficiente come inizio:

<?php
session_start();
if($_POST) {
   if($_POST['somma'] == $_SESSION['add1'] + $_SESSION['add2']) {
      echo 'Somma corretta';
   } else {
      echo 'Somma errata';
   }
} else {
   $_SESSION['add1'] = rand(1,100);
   $_SESSION['add2'] = rand(1,100);
?>
<form action="" method="post">
<?php echo $_SESSION['add1'], " + ", $_SESSION['add2'], " = "?> <input type="text" name="somma"> <input type="submit" name="sub" value="invia">
</form>
<?php
}
?>

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie mille..

ti ringrazio molto.

 :)

risposto 8 anni fa
luigi
X 0 X

E' solo una bozza, ma dovrebbe essere sufficiente come inizio:

<?php
session_start();
if($_POST) {
   if($_POST['somma'] == $_SESSION['add1'] + $_SESSION['add2']) {
      echo 'Somma corretta';
   } else {
      echo 'Somma errata';
   }
} else {
   $_SESSION['add1'] = rand(1,100);
   $_SESSION['add2'] = rand(1,100);
?>
<form action="" method="post">
<?php echo $_SESSION['add1'], " + ", $_SESSION['add2'], " = "?> <input type="text" name="somma"> <input type="submit" name="sub" value="invia">
</form>
<?php
}
?>

 :bye:

gianni, mi protesti dire come faccio ad integrarlo con il mio codice:

ti spiego

quando faccio signup.php, si accede alla registrazione. (la funzione di default)

ma se faccio signup.php?profile=edit , mi apre la parte della modifica dell'utente sempre con il codice di siucrezza.

per adesso ho fatto cosi:

<?php
session_start();
include("inc.php");
if($_POST) {
   if($_POST['somma'] == $_SESSION['add1'] + $_SESSION['add2']) {
      
      doSignup();
   
   } else {
      echo 'Codice Di Sicurezza/Somma errata';
   }
} else {
   $_SESSION['add1'] = rand(1,100);
   $_SESSION['add2'] = rand(1,100);
?>
<form action="signup.php" method="post">
 Firstname<input type="text" name="Firstname" /><br>
 Lastname<input type="text" name="Lastname" /><br>
 Sex<input type="text" name="Sex" /><br>
 Username<input type="text" name="Username" /><br>
 Password<input type="text" name="Password" /><br>
 Email<input type="text" name="Email" /><br>
<?php echo $_SESSION['add1'], " + ", $_SESSION['add2'], " = "?> <input type="text" name="somma"> <input type="submit" name="sub" value="invia">
</form>
<?php
}
?>

Però non riesco ad fare la GET perchè non ci riesco ad integrarla con il codice che mi hai fatto.

la dosignup sta in un inc.signup.php con la funzione function doSignup(){}

e devo fare il modo che con $_GET mi chiama dosignupupdate. e altre funzioni.

mi protesti darmi una mano?.

grazie.

risposto 8 anni fa
luigi
X 0 X

niente, lascia pure perdere, sto faccendo in un'altro modo.

come: sito modulare.

ciao.

risposto 8 anni fa
luigi
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda