» »

[php] Knjiga gostov

[php] Knjiga gostov

urosz ::

Imam par vprašanj glede izdelave knjige gostov..

1) kako se da najbolje preprečit vnos zlo-namerne kode. se pravi morebitno html ali kakšno drugo kodo da se odstrani in šele potem vpiše v bazo
2) kako preprečit vpis "spam-botom". se pravi neko preverjanje, da obiskovalec vnese neko kodo

drugače pa nasplošno kak nasvet, kako se lotit kodiranja tako imenovane "knjige gostov". (da vidim če sem princip približno zadel.. verjetno sem, glede na to, da deluje)

pa še prosil bi či lahko design malo pokomentirate KLIK ZA SS

HardFu ::

Dodas captcha, ali re-captcha, to so tiste slikce, ki imajo tekst gor in ga moras prepisat okence pod ali nad njim. Kar se pa tice zlonamerne kode pa konvertiras vsebino tako da tage zamenjas z siframi, vsak programski jezik ima svojo funkcijo za to (php ima recimo htmlspecialchars), drugace pa lahko to resis tudi z javascriptom, ne rabis ga pisat sam ker te skripte verjetno najdes na netu... Priporocam pa itak oboje za povecano varnost (ker je moznost da nekdo nima javascripta), dodatno lahko napises tudi kaksno funkcijo, ki preverja vnesene podatke.

LP
http://codeable.io

R33D3M33R ::

1) uporabi strip_tags() ali kak preg_replace()
2) Pozabi na vnašanje kode. Naredi eno vnosno polje in napiši, da naj obiskovalci polje pustijo prazno. Ker boti niso tako pametni, da bi v prvo pogruntali za kaj se gre, bodo izpolnili vsa polja. Nato samo pred vpisom zavržeš komentar, zapišeš njihov IP v eno datoteko/tabelo in jih tako za vedno blokiraš.
Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:

Ziga Dolhar ::

1. mysql_escape_string oz. ustrezna "escape" funkcija.

"htmlspecialchars" še zdaleč ne zadošča. O kakem javascriptu, prosim lepo, niti ne upaj razmišljat.
https://dolhar.si/

jype ::

Uporabljaj ORM. Google ve, kaj je to.

urosz ::

sem se odločil za mysql_escape_string in captcho .. vendar še moram naštudirat ti dve funkciji :D bom že.. ali lahko kdo čist na kratko opiše delovanje teh dveh?

pa še za design kakšno mnenje bi prosil

drugače pa hvala vsem itak

bluefish ::

sicer je podoba in kritika Knjige gostov odvisna od preostanka strani (upam, da le ta obstaja :) ). Bi ti svetoval, da malo zmanjšaš sam naslov, ki ni nujno, da je čez cel header. Enako tudi za Vpiši se v knjigo in Prejšnji vpisi. Preostanek pa je kar všečen. Morda še datum preoblikuj v nam poznan format DD.MM.YYYY + ura.

urosz ::

preostanek strani ne obstaja.. zgolj učim se še :P :P in upam na to, da nekega dne bo priložnost da se lotim kakega projekta

bluefish ::

No, če pa to, potem se lahko same izdelave knjige gostov lotiš malo bolj minimalistično in se potrudiš, da je možna kar se le da enostavna prilagoditev ob morebitnem poznejšem vstavljanju na stran.

R33D3M33R ::

Če boš uporabljal captcho, uporabi tako, da jo bodo ljudje lahko prebrali ...
Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:

urosz ::

zdaj nameravam pač naredit to knjigo gostov kar se da "popolno".. se pravi uporaba baze, preprečevanje zlonamerne kode, captcha, raznorazni dodatki kot gumbek za mail tistega, ki je vpisal tudi mail, smeškoti.. aja pa še nekaj me zanima.. datume mi izpisuje avtomatsko take, saj imam tip podatkov v tabeli timestamps.. kako bi naredil da bi lahko sam oblikoval format.. moram shranjevat posebej date in posebej time? in pol v phpju izpisat?

Atos ::

Ne. Uporabi date() funkcijo. Prvi argument sprejme format, drugi pa unix timestamp. Se pravi, če želiš nekaj v stilu: "12.12.08 ob 12:33" uporabi takole: echo date("j.n.y \o\b G:i", nek_timestamp);

Glede escapanja pa bi bolj priporočal mysql_real_escape_string(). Je identična mysql_escape_string(), s tem, da tudi upošteva charset trenutne povezave in pa mysql_escape_string je deprecated!

Baja ::

uzizek:
priporočam R33D3M33R-jev način proti spam-bottom. namesto teženja uporabnikom, da naj pustijo prazno polje, ga skrij, v label pa daj obvestilo o zahtevani praznosti. boti ga vseeno napolnijo, folk ne bo imel tezav, obvestilo pa si izpisal zaradi screen readerjev.

se to. nekje sem enkrat prebral, da je pametno uporabljati mysql_real_escape_string takole:
	function mysqlEscape($string){  	
	  	if( get_magic_quotes_gpc() == 1 ) {
	    	    $string = stripslashes($string);
	   	}
	   	return mysql_real_escape_string($string);
	}

R33D3M33R ::

Skritje v bistvu ni pametno. Sem na lastni koži ugotovil, da poznajo nekateri spam boti hidden atribut in poleg tega upoštevajo še CSS!
Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:

urosz ::

ne razumem funkcije get_magic_quotes_gpc() :S kaj naredi?

get_magic_quotes_gpc — Gets the current configuration setting of magic quotes gpc

Ziga Dolhar ::

Pove, kakšna je trenutna [strežniška] nastavitev direktive magic_quotes_gpc.

PHP: Magic Quotes - Manual

Sicer pa - magic quotes je [za resno delo] bad, bad.
https://dolhar.si/

urosz ::

in kaj to je? :D

vbistvu ne razumem zakaj je potrebno if( get_magic_quotes_gpc() == 1 )

Baja ::

ker če je magic_quotes vklopljen, avtomatsko dodaja narekovaje (avtomatsko eskejpa), ti pa potem to še enkrat eskejpas z mysql_real_escape_string kar v bistvu ni to kar hočeš.

urosz ::

čas sem popravil, zdaj pa se matram z escapanjem, ampak mam težave...

(mysqlEscape je funkcija, ki jo je napisal Baja, v spremenljivkah $ime, $besedilo, $email pa že prej shranjujem vrednosti $_POST['Ime'] itd..)

function vpisi_v_bazo($ime, $besedilo, $email){
	$ime=mysqlEscape("$ime");
	$besedilo=mysqlEscape("$besedilo");
	$email=mysqlEscape("$email");
	$ip=$_SERVER['REMOTE_ADDR'];
	$cas=time();
	$link=mysql_connect("localhost","root","geslo");
	if (!$link){
		die ("Ne morem se povezat z MySQL!");
	}
	mysql_select_db("projekt1",$link) or die ("Ne morem izbrati baze!");
	$vnos=mysql_query("INSERT INTO guestbook (Ime,Komentar,Email,Cas,IP) VALUES ('$ime','$besedilo','$email','$cas','$ip')");
	if (!$vnos){
		echo "Vnos ni uspel zaradi ".mysql_error();
	}
	else {
		global $vpisan;
		$vpisan=true;
	}
	mysql_close($link);
}


Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\projekt1\Guestsbook\forma.php on line 39

resnično rabim pomoč za escapanje :(

Zgodovina sprememb…

  • spremenil: urosz ()

Atos ::

Zakaj ne greš pogledat v dokumentacijo PHP, kaj mysql_real_escape_string() sploh počne? Tam ti je jasno napisano, da stvar deluje samo, če si povezan z bazo (ker pač mora vediti s kakim charsetom si povezan z bazo). Ti pa tukaj kličeš funkcijo še preden vzpostaviš povezavo z bazo. Premakni vrstico

$link=mysql_connect("localhost","root","geslo");

čisto na vrh te tvoje funkcije in stvar bi morala delovati.

urosz ::

to sem zdaj popravil in naj bi delovalo, vendar mislim da ne deluje
 K L I K

K L I K

urosz ::

zanima me kako naj naredim ocenenjevanje komentarjev.. tisto.. npr. +2, -5, 0

pa design sem malo spremenil:

urosz ::

escapanje pa še vedno ne deluje.. pomoč prosim prosim prosimmm :D

if( ... vsa polja izpolnjena vglavnem .. ){
	vpisi_v_bazo($_POST['ime'],$_POST['besedilo'],$_POST['email']);
} ...

function mysqlEscape($string){  	
	if( get_magic_quotes_gpc() == 1 ) {
		$string = stripslashes($string);
	}
	return mysql_real_escape_string($string);
} 

function vpisi_v_bazo($ime, $besedilo, $email){
	$link=mysql_connect("localhost","root","shisha123");
	if (!$link){
	die ("Ne morem se povezat z MySQL!");
	}
	mysql_select_db("projekt1",$link) or die ("Ne morem izbrati baze!");
	$ime=mysqlEscape("$ime");
	$besedilo=mysqlEscape("$besedilo");
	$email=mysqlEscape("$email");
	$ip=$_SERVER['REMOTE_ADDR'];
	$cas=time();
	if (!$link){
		die ("Ne morem se povezat z MySQL!");
	}
	$vnos=mysql_query("INSERT INTO guestbook (Ime,Komentar,Email,Cas,IP) VALUES ('$ime','$besedilo','$email','$cas','$ip')");
	if (!$vnos){
		echo "Vnos ni uspel zaradi ".mysql_error();
	}
	else {
		global $vpisan;
		$vpisan=true;
	}
	mysql_close($link);
}


vpišem recimo html kodo in se nažalost ta vseeno vpiše v bazo in potem pri izpisu tudi upošteva

Zgodovina sprememb…

  • spremenil: urosz ()

R33D3M33R ::

Edit: sem nekaj spregledal
Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:

Zgodovina sprememb…

urosz ::

ni mi jasno zakaj ne dela ... :S

R33D3M33R ::

Za odstranjevanje HTML uporabi: http://si2.php.net/strip-tags
Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:

urosz ::

sem dal to zdaj in deluje .. hvala torej

kaj pa
"zanima me kako naj naredim ocenenjevanje komentarjev.. tisto.. npr. +2, -5, 0"

pa še mogoče kakšen komentar o obliki knjigice?

R33D3M33R ::

Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:

matichy ::

Pozdravljeno!
Glede botov pa ne preveč komplicirat.
To se naredi povsem preprosto (po moji logiki) in samo z 1 if stavkom.
Primer

6+1 = |_________|

Koda (HTML):
<html>
<form action="knjiga.php" method="POST">
6+1=<input type="text" name="okno"><br>
<!--Tole pa je gumbek-->
<input type="submit" value="Poslji">
</form>
</html>


Sedaj pa potrebujemo kodo, ki bo preverila rezultat 6+1.
Če bo v oknu pisalo število 7 bo uporabnika spustilo naprej.
Če ne ga ne bo!

Koda(PHP):
<?
$okno = $_POST["okno"];
$pravilno = "7";

if ($okno == $pravilno){
//Koda, ki mu dovoli vpis v bazo.
}
else{
//Koda, ki mu ne dovoli vpis v bazo. 
}
?>


Upam da ti je kaj jasno. Če ti ni vprašaj spodaj!

Zgodovina sprememb…

  • spremenil: matichy ()

darix ::

@matichy: deluje. hvala

Zgodovina sprememb…

  • spremenil: darix ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Branje slik jpg iz MySQL z PHP

Oddelek: Izdelava spletišč
152311 (1929) a-ptuj1
»

MySQL BETWEEN dates?

Oddelek: Programiranje
111332 (1246) Housy
»

Težave z vpisovanje v mysql bazo z php

Oddelek: Izdelava spletišč
51004 (880) Atos
»

[php, mysql] sortiranje izpisa iz baze

Oddelek: Izdelava spletišč
262604 (2123) Binji
»

[PHP] moj forum :D

Oddelek: Izdelava spletišč
71477 (1316) medobear

Več podobnih tem