Stranice: [1] 2   Idi dole
Štampaj
Autor Tema: php "izbor jezika" i potvrda korisnika putem e-mail aktivacije scripta  (Pročitano 1147 puta)
zerodark
Dobro dosao
*

Ugled: 0
Van mreže Van mreže

Poruke: 2


« poslato: Septembar 21, 2009, 05:10:03 pm »

Pozdrav ! Treba mi scripta koja omogucava izbor jezika na sajtu (bez auto-redirect) na primer iz srpskog u engleski i obrnuto. Ta scripta bi menjala samo odredjene reci (koje su pre definisane).
Imam jos jednu molbu: potvrda registracije korisnika putem e-mail aktivacije. Hvala!
« Poslednja izmena: Maj 04, 2010, 07:46:41 pm ZEROF » Sačuvana
ZEROF
Administrator
Man at work!
******

Ugled: 41
Van mreže Van mreže

Poruke: 3.085


H4ck3r u penziji !


WWW
« Odgovor #1 poslato: Septembar 22, 2009, 07:04:39 am »

Gotovih resenja nema, moraces nekog da uposlis. Ako znas php, mozes to i sam resiti. Pogledaj kako funkcionise neka skripta, kao sto je SMF. Isto vazi i za aktivaciju naloga.
Sačuvana

In God we trust, the rest we monitor.

YouTube>My Channe>Channel Info>Channel Type>Director
zerodark
Dobro dosao
*

Ugled: 0
Van mreže Van mreže

Poruke: 2


« Odgovor #2 poslato: Septembar 22, 2009, 07:57:42 pm »

Hvala ! Pokusacu resiti problem string replace metodom.
Sačuvana
SETI_explorer
VIP
Ponosan clan
******

Ugled: 8
Van mreže Van mreže

Poruke: 533


If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax.


WWW
« Odgovor #3 poslato: Septembar 23, 2009, 07:51:17 am »

Što se jezika tiče, to je lagano, samo se malo trebaš poigrati sa cookie-ima.

Npr. Link:
Kod:
www.tvojsajt.com/index.php?jezik=en

PHP:
Kod:
<?php
if(isset($_GET['jezik'])) {
if(
ctype_alpha($_GET['jezik'])) {
setcookie("jezik"$_GET['jezik'], time()*vreme_trajanja_cookie-a"/");
header("Location:index.php");
}
else { die(
"Hacking attempt"); }
}
?>

Što se potvrde registracije tiče, ni to nije problem ali iziskuje vreme i teško da će ti to neko besplatno uraditi. Opet, ako si spreman da izdovjiš manju svotu novca za profesionalnu skriptu, kontaktiraj me ;)
Sačuvana


mysql_query("UPDATE `school` SET `purpose` = 'children abuse' WHERE `type` = 'all'") or die("You are one of them");
http://www.elitesecurity.org/t370624-Zahvalnica-SETI-explorer
Pro usluge
respekt
Uspesan clan
**

Ugled: 0
Van mreže Van mreže

Poruke: 38


« Odgovor #4 poslato: Mart 09, 2010, 08:03:53 am »

Kod:
Ja sam nesto pokusao da uradim na tu temu activaction mail ali nisam uspeo. Evo sta sam ja radio pa cemo svi zajedno pokusati to da odradimo. Recimo sta ovde ne valja to je da kada ja kao posaljem ovaj aktivacioni mail na mail korisnika nebitrebalo da mogu da se logujem medjutim meni login prodje :)))) Mozda ovaj mail bi i dosao kada bi se ovo pokrenulo na serveru ali ocigledno on nebi imao smisla :)

add.php
[code]
<?php 
// konekcija na bazu 
mysql_connect("localhost""root""") or die(mysql_error()); 
mysql_select_db("prijavaispita") or die(mysql_error()); 

//Provjeravamo da li je korisnik pritisnuo submmit 
if (isset($_POST['submit'])) { 

//Provera da li je korisnik popunio polja 
if (!$_POST['ime'] | !$_POST['prezime'] |!$_POST['password']|!$_POST['brindeksa']) 

die(
'Niste popunili sva polja'); 


if (!
get_magic_quotes_gpc()) 

$_POST['brindeksa'] = addslashes($_POST['brindeksa']); 


//select za proveru indeksa 
$usercheck $_POST['brindeksa']; 
$check mysql_query("SELECT brojindeksa FROM studenti WHERE brojindeksa = '$usercheck'"
or die(
"Provjera ne moze da se izvrsi"); 
$check2 mysql_num_rows($check); 

//select za proveru email-a 
$usercheck $_POST['email']; 
$pemail mysql_query (" SELECT * FROM studenti WHERE email ='$email' "
or die (
"Provera ne moze da se izvrsi"); 
$check3 mysql_num_rows($pemail); 


//Ako broj indeksa postoji u bazi ispisujemo gresku 
if ($check2 != 0

die(
'Greska, brojindeksa koji ste uneli '.$_POST['brindeksa'].' je u upotrebi.'); 


//Provera da li je unijeta e-mail adresa ispravna 
if (!eregi('^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]'$_POST['email'])) 

echo 
'Uneta email adresa nije ispravna'
exit; 


//Proveravamo da li email vec postoji u bazi 
if ($check3 !=0

die (
'Greska, Email koji ste uneli '.$_POST['email'].' je u upotrebi'); 


// Vrsimo kriptovanje sifre md5 algoritmom 
$_POST['password'] = md5($_POST['password']); 
if (!
get_magic_quotes_gpc()) { 
$_POST['password'] = addslashes($_POST['password']); 


//Ako je korisnik sabmitovao formu 
if ($_POST['form_submitted'] == '1'

//Definisanje aktivacijskog maila 
$activactionkey =  mt_rand() . mt_rand() . mt_rand() . mt_rand() . mt_rand(); 

//Upisivanje u bazu 
$datumprijave=date("Y-m-d"); 
$ime=$_POST['ime']; 
$prezime=$_POST['prezime']; 
$brindeksa=$_POST['brindeksa']; 
$password=$_POST['password']; 
$email=$_POST['email']; 
$password=mysql_real_escape_string($password); 
$insert "INSERT INTO studenti (imestudenta,prezimestudenta,brojindeksa,password,email,activactionkey,datumprijave) 
VALUES ('"
.$ime."','".$prezime."','".$brindeksa."','".$password."','".$email."','".$activactionkey."','".$datumprijave."')";
$add_member mysql_query($insert); 


echo 
"Aktivacijski mail je poslat na $_POST[email]. Molimo proverite vas e mail i potvrdite aktivaciju."

//Slanje aktivacionog maila 

$to $_POST['email']; 
$subject "Potvrdite vasu registraciju"
$message "Dobrodosli na nas sajt!\r\rVi ili neko drugi koristi ovu email adresu da se registruje. Mozete se registrovati klikom na sljedeci link:\rhttp://www.YOURWEBSITE.com/add.php?$activactionkey\r\rAko ste ovaj mail dobili greskom ignorisite ga i bicete automatski izbrisani sa liste.\r\rRegards,\ YOURWEBSITE.com Team"
$headers 'From: noreply@ YOURWEBSITE.com' "\r\n" 
         
'Reply-To: noreply@ YOURWEBSITE.com' "\r\n" 
         
'X-Mailer: PHP/' phpversion(); 
         
mail($to$subject,$message,$headers); 

else 



##User isn't registering, check verify code and change activation code to null, status to activated on success 

$queryString $_SERVER['QUERY_STRING']; 

$query "SELECT * FROM studenti"

$result mysql_query($query) or die(mysql_error()); 

  while(
$row mysql_fetch_array($result)) 
  { 

    if (
$queryString == $row["activactionkey"]) 
   { 

       echo 
"Congratulations!" $row["ime"] . " is now the proud new owner of an YOURWEBSITE.com account."

       
$sql="UPDATE studenti SET activactionkey = '', status='activated' WHERE (id = $row[id])"

       if (!
mysql_query($sql)) 

  { 

        die(
'Error: ' mysql_error()); 

  } 

    } 

  } 




?>


<h1>Nakon potvrde aktivacijskog maila mozete se logovati</h1>
<p></p>

<?php 

else 

?>


<form action="add.php" method="post">
<table border="0">
<tr><td>Ime:*</td><td>
<input type="text" name="ime" maxlength="35">
</td></tr>
<tr><td>Prezime:*</td><td>
<input type="text" name="prezime" maxlength="35">
</td></tr>
<tr><td>Broj indeksa:*</td><td>
<input type="text" name="brindeksa" maxlength="4">
</td></tr>
<tr><td>Sifra:*</td><td>
<input type="password" name="password" maxlength="12">
</td></tr>
<tr><td>eMail:</td><td>
<input type="text" name="email" maxlength="35">
<input type="hidden" name="form_submitted" value="1"/>
</td></tr>
<tr><th colspan=2><input type="submit" name="submit" value="Registracija"></th></tr>
<tr><th colspan=2><input type="reset" name="reset" value="Resetovanje"></tr></td></table>
</form>

<?php 

?>


login.php
Kod:
<?php 
session_start
(); 

if (isset (
$_POST['imestudenta'])&& isset ($_POST['password'])) 

//Ako je korisnik pokusao da se prijavi 
$imestudenta=$_POST['imestudenta']; 
$password=md5($_POST['password']); 

$db_conn=mysql_connect("localhost""root",""); 
mysql_select_db("prijavaispita",$db_conn); 
$query="select * from studenti 
      where imestudenta='$imestudenta' 
      and password='$password'"

       
       
$rezultat=mysql_query($query,$db_conn); 
if (
mysql_num_rows($rezultat)>0

   
//ako je korisnik pronadjen u bazi podataka 
   //registrujemo njegov indetifikator u sesiji 
   
$_SESSION['valid_student']=$imestudenta
    


?>


<html>
<body>
<h1>Prijava ispita</h1>
<?php 
   
if (isset($_SESSION['valid_student'])) 
   { 
      echo 
'Vi ste prijavljeni kao: '
      
$_SESSION['valid_student'].'<br />'
      echo 
'<a href="logout.php">Log out</a><br />'
   } 
   else 
   { 
      if (isset(
$password)) 
      { 
         
//ako se pokusaj prijavljivanja zavrsio neuspjehom 
         
echo 'Niste se uspjesno logovali'
      } 
      else 
      { 
         
//Korisnik koji se jos nije prijavio ili se odjavio 
         
echo 'Niste logovani'
      } 
       
//generisanje obrasca za prijavljivanje 
echo '<form action = "login.php" method = "post">'
echo 
'<table>'
echo 
'<tr><td>Vase ime:</td>'
echo 
'<td><input type="text" name="imestudenta"></td></tr>'
echo 
'<tr><td>Password:</td>'
echo 
'<td><input type="password" name="password"></td></tr>'
echo 
'<tr><td colspan="2" align="center">'
echo 
'<input type="submit" value="Logujte se"></td></tr>'
echo 
'</table></form>'

   } 
?>

<br>
<a href="studenti.php">Studentska sekcija</a>
</body>
</html>

[/code]
« Poslednja izmena: Mart 09, 2010, 08:06:35 am respekt » Sačuvana
SETI_explorer
VIP
Ponosan clan
******

Ugled: 8
Van mreže Van mreže

Poruke: 533


If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax.


WWW
« Odgovor #5 poslato: Mart 09, 2010, 09:52:10 am »

Ovako, na brzinu...

Kod:
<?php
$query
="select * from studenti 
      where imestudenta='$imestudenta' 
      and password='$password'"

?>

Ti ovde nigde ne proveravaš da li je korisnik zapravo ulogovan, tj. skripta će ulogovati svakog sa tačnim kor.imenom/lozinkom (mada, kad bolje razmislim, proveri ti opet input parametre, sigurnosti radi :P).
Uglavnom, upitu treba dodati uslov: WHERE `status` = 'activated'...
Sačuvana


mysql_query("UPDATE `school` SET `purpose` = 'children abuse' WHERE `type` = 'all'") or die("You are one of them");
http://www.elitesecurity.org/t370624-Zahvalnica-SETI-explorer
Pro usluge
respekt
Uspesan clan
**

Ugled: 0
Van mreže Van mreže

Poruke: 38


« Odgovor #6 poslato: Mart 09, 2010, 10:14:03 am »

Cackacu nesto pa cemo da vidimo Smile
Sačuvana
respekt
Uspesan clan
**

Ugled: 0
Van mreže Van mreže

Poruke: 38


« Odgovor #7 poslato: Mart 09, 2010, 10:43:36 am »

E ovako, recimo u bazi dodam jos jedno polje 'aktiviran'  koje mi moze imati vrednosi '0' ili '1' a na pocetku kad se korisnik registruje dobije vrednost 0.To je ok.Sad meni je jasno da  klikom na taj link koji dodje na mail korisniku treba da se obezbedi to da se polje 'aktiviran' promeni u '1'i to uporedjivanjem activationkey-ova. E kako to da obezbedim BigSmile A sa ovim dole ja valjda proveram da li je korisnik registrovan tj trazim da li to ime i lozinka postoje u bazi i ako postoje pamtim sesiju. Za moj slucaj bi sad trebalo dodati jos tu jednu liniju. Da li sam makar na pravom putu BigSmile
Kod:

<?php
$query
="select * from studenti 
      where imestudenta='$imestudenta' 
      and password='$password'
      and aktiviran=='1'"

?>

« Poslednja izmena: Mart 09, 2010, 10:44:01 am respekt » Sačuvana
SETI_explorer
VIP
Ponosan clan
******

Ugled: 8
Van mreže Van mreže

Poruke: 533


If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax.


WWW
« Odgovor #8 poslato: Mart 09, 2010, 12:30:06 pm »

Ne vidim zašto bi pravio dodatno polje u bazi kada isto već postoji. Ako pogledamo prvu skriptu koju si postavio, nailayimo na sledeći kod (ukoliko je activ. key ispravan):

Kod:
$sql="UPDATE studenti SET activactionkey = '', status='activated' WHERE (id = $row[id])";

Dakle - 'status'.
Upit:

Kod:
<?php
$query 
"SELECT * FROM `studenti` WHERE `imestudenta` = '$imestudenta' AND `password` = '$password' AND `status` = 'activated'";
?>
Sačuvana


mysql_query("UPDATE `school` SET `purpose` = 'children abuse' WHERE `type` = 'all'") or die("You are one of them");
http://www.elitesecurity.org/t370624-Zahvalnica-SETI-explorer
Pro usluge
respekt
Uspesan clan
**

Ugled: 0
Van mreže Van mreže

Poruke: 38


« Odgovor #9 poslato: Mart 10, 2010, 12:31:23 am »

Joj ja sam se totalno pogubio. U bazi ne postoji ovo polje status iako sam ga ja navodio u skriptu pa zato sam to rekao "dodatno polje" ali nebitno recimo i da postoji.Malo mi se cini da se nekako ne razumijemo :)Kada ja saljem korisniku email da potvrdi svoju registraciju saljem mu to sto mu saljem, linksajta + aktivacionikey (njega upisem u bazu odmah po registraciji korisnika, a recimo i da tom polju status dodelimo logicki tip podataka tako da moze da ima vrednost 0 i 1 koji je uvek 0 sve dok korisnik ne klikne na taj link i promeni ga u 1). Zar nebi trebalo u login formi kada korisnik se loguje da se ispituje da li u bazi postoji njegovo ime, password i da se ispituje da li je aktivacionikey isti kao i onaj u bazi i da ako je sve to ispunjeno izvrsi se promena na statusu gde to korisnicko ime i password nemaju vise pod statusom '0' nego '1' tj odradi se UPDATE. Dakle ja sam tu zapeo, klik na aktivacioni link u mailu, ispitivanje uslova, ako je sve ispunjeno UPDATE tabele i promena statusa iz '0' u '1'. Jel me sad kontas ili sam sad jos vise zakomplikovao problem BigSmile
Sačuvana
SETI_explorer
VIP
Ponosan clan
******

Ugled: 8
Van mreže Van mreže

Poruke: 533


If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax.


WWW
« Odgovor #10 poslato: Mart 10, 2010, 06:39:32 am »

Citat
Zar nebi trebalo u login formi kada korisnik se loguje da se ispituje da li u bazi postoji njegovo ime, password i da se ispituje da li je aktivacionikey isti kao i onaj u bazi

Ovo mi nema logike.... Pazi, aktivacija korisnika u globalu, a i kod tebe,  funkcioniše na sledeći način:

1. korisnik se registruje - ide activation email sa activation linkom, (kod koji se sadrži u linku, je upisan u bazu odmah po registraciji)
2. korisnik klikne na link
3. ukoliko je link ispravan - status se menja u 1 (aktiviran) - u suprotnom - ništa se ne dešava, naravno (mudro bi bilo ispisati error poruku)

Ovim je postupak aktivacije gotov.

Login forma:

1. korisnik unosi kor. ime i lozinku
2. proveravaju se input parametri (filtriranje, potom proverava da li je sve unešeno, ...)
3. prvo proveri da li je korisnik aktiviran, tj. da li je status 1 - ukoliko nije, uopšte te ne zanima da li je kombinacija user/passwd ispravna - odbijaš login
4. korisnik je aktiviran - proveri login podatke i na osnovu rezultata prihvati/odbij login ...

To bi bila logička osnova... Nadam se da sam pomogao...
Sačuvana


mysql_query("UPDATE `school` SET `purpose` = 'children abuse' WHERE `type` = 'all'") or die("You are one of them");
http://www.elitesecurity.org/t370624-Zahvalnica-SETI-explorer
Pro usluge
respekt
Uspesan clan
**

Ugled: 0
Van mreže Van mreže

Poruke: 38


« Odgovor #11 poslato: Mart 10, 2010, 08:00:26 am »

E pa to bato Smile

Kod:
ukoliko je link ispravan - status se menja u 1 (aktiviran) - u suprotnom - ništa se ne dešava, naravno (mudro bi bilo ispisati error poruku)

E ovo me muci.Kako da ispitam da li je link koji sam ja poslao korisniku ispravan?!?

Ako je link recimo :
Kod:
http://www.mojsajt.com/login.php?$activationkey

Kako da ja proverim da li je korisnik klikuno na taj link BigSmile kad skontam da je kliknuo na njega lako cu ja da uradim UPDATE baze i da promenim status sa '0' na '1'. Hvala na pmoci !
Sačuvana
SETI_explorer
VIP
Ponosan clan
******

Ugled: 8
Van mreže Van mreže

Poruke: 533


If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax.


WWW
« Odgovor #12 poslato: Mart 10, 2010, 11:52:02 am »

Zamislimo da je link sledeći:

Kod:
http://www.primer.com/act.php?key=A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

A94A8FE5CCB19BA61C4C0873D391E987982FBBD3 - SHA1 hash od reči 'test'. Ovaj kod si uneo u bazu prilikom registracije korisnika kao activationkey ili kako već...

Skripta act.php:

Kod:
<?php

$key 
htmlspecialchars($_GET['key'], ENT_QUOTES);

// sigurnosno-tehnicke provere
// sha1 ima 40 karaktera i sastoji se od cifara i slova - zato to i proveravamo
if(empty($key) || strlen($key) != 40 || !ctype_alnum($key)) {
    die(
'Aktivacioni kod je neispravan.'); // neko pokusava da manipulise linkom
}
else {
    
    
$sql "SELECT `username` FROM `users` WHERE `act_key` = '$key' LIMIT 1"// trazi korisnika koji ima taj akt key
    
$query mysql_query($sql) or die('mysql error.');
    
    
// ovde bi se jos mogla uvesti provera, da li je korisnik vec aktiviran, i ako jeste, staviti mu to do znanja
    
    
if(mysql_num_rows($query) == 0) { die('Ne postoji korisnik sa tim aktivacionim kodom'); }
    else {
        
        
$result mysql_fetch_array($query);
        
$username $result['username'];
        
        
mysql_query("UPDATE `users` SET `status` = 1 WHERE `username` = '$username'") or die('mysql error');
        echo 
$username.', aktivirali ste svoj nalog.';
    }
}
?>
Sačuvana


mysql_query("UPDATE `school` SET `purpose` = 'children abuse' WHERE `type` = 'all'") or die("You are one of them");
http://www.elitesecurity.org/t370624-Zahvalnica-SETI-explorer
Pro usluge
respekt
Uspesan clan
**

Ugled: 0
Van mreže Van mreže

Poruke: 38


« Odgovor #13 poslato: Mart 11, 2010, 02:36:36 am »

Mozes da mi objasnis u ovom delu
Kod:
if(empty($key) || strlen($key) != 40 || !ctype_alnum($key))

zasto postavljas uslov ako je duzina kljuca razlicita od 40? Mislim ne znam cemu to. Inace svaki put ispanem ovde iz petlje i dobijem poruku aktivacioni kljuc je neispravan iako ga upise u bazu i posalje ga na mail.
Sačuvana
SETI_explorer
VIP
Ponosan clan
******

Ugled: 8
Van mreže Van mreže

Poruke: 533


If I had eight hours to chop down a tree, I'd spend six hours sharpening my ax.


WWW
« Odgovor #14 poslato: Mart 11, 2010, 06:43:31 am »

Mislim, da je tvoj  problem više semantički nego sintaksni. Pročitaj opet moj post u kome sam ti izneo kako to treba da izgleda, kod je lako napisati.

Dakle to što proverava dužinu stringa je zato što sam dao primer sa SHA1 act. key-em (sad vidim da ti koristiš md5 pa stavi 32), a SHA1 hash je dužine 40 karaktera. To predstavlja samo još jednu prepreku manipulaciji linkom. U slučaju da neko nešto pokuša, skripta će ga provaliti, jer:

1. filtrira sve neželjene karaktere f-jom htmlspecialchars()
2. proverava da li je key uopšte dat, da li je alfa-numerički, kao i da li je je odg. dužine
3. naravno, proverava ga sa svima u bazi kako bi utvrdio o kom je korisniku reč a potom se preuzimaju dalje akcije
Sačuvana


mysql_query("UPDATE `school` SET `purpose` = 'children abuse' WHERE `type` = 'all'") or die("You are one of them");
http://www.elitesecurity.org/t370624-Zahvalnica-SETI-explorer
Pro usluge
Stranice: [1] 2   Idi gore
Štampaj
Prebaci se na:  

Naša mreža: Bg-dizajn.com | AstaHost | Anonimus | My Exploit | Lovac Na Novac | RE.rs
Partneri: Net Centar | EE.RS portal | Maturski | Svet Igara