Zabezpieczenie skryptu

2011-08-08 21:21:19 Post #1 xxdrago

 
Witam, jak mogę zabezpieczyć ten skrypt czego użyć?

<?php 
echo '<html>
<head>
<title>Weryfikacja</title>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<h2>&raquo; Weryfikacja E-mail</h2> 
<div class="content"> 
';
require_once('recaptchalib.php');
$privatekey = "xxx";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
die ("<p class='blad'>Błednie przepisałeś kod z obrazka spróbuj ponownie <a href='javascript: history.go(-1)'>Powrót do poprzedniej strony</a></p>" .
"<br><br>reCAPTCHA said: " . $resp->error . ")");
} else {
$email = $_POST['email']; 
if($email) { 
// łączymy się z bazą danych 
$connection = @mysql_connect('-----------------') 
or die('Brak połączenia z serwerem MySQL'); 
$db = @mysql_select_db('prosta_stunt_cba_pl', $connection) 
or die('Nie mogę połączyć się z bazą danych'); 
$loguj="select email from mailing where email='$email'"; 

$rekordy = mysql_query($loguj);
if(mysql_num_rows($rekordy)==0)
{
$ins = @mysql_query("INSERT INTO mailing SET aktywne='0', email='$email'"); 
$to      = ''.$email.'';
$subject = 'Aktywuj swoje konto!';
$message = '
Witaj,
Jeśli chcesz otrzymywać e-maile z Prosta-Stunt.cba.pl
Aktywuj swoje konto klikająć w link poniżej:
http://mailing.prosta-stunt.cba.pl/aktywator.php?email='.$email.'
Zobacz Polityke Prywatności tej listy:
http://mailing.prosta-stunt.cba.pl/polityka_prywatnosci.html
Jeśli w ciągu 7 dni nie wejdziesz na powyższą stronę,
aby potwierdzić Twoją zgodę na otrzymywanie maili,
Twoje dane zostaną usunięte z bazy danych Prosta-stunt.cba.pl


Pozdrawiamy zespół Prosta Stunt!	
';
$headers = 'From: xxx';
mail($to, $subject, $message, $headers);
mysql_close($connection); 
echo "<p> <img class='tick' src='img/tick.png' alt='' />Dziekujemy za dodanie sie do bazy zostal wyslany link aktywacyjny.</p>";
} 
else
{
echo "<p class='blad'> Taki email isnieje w bazie</p>";
}
}
}
echo '</div></body> </html>';
?>

2011-08-08 21:58:24 Post #2 nospor

 
Tak na pierwszy rzut oka to email z forma wkładasz bez zabezpieczeń do zapytania, przez co można wykonać tu atak sqlinjection.

Używaj mysql_real_escape_string() na danych, które pochodzą od użytkownika.

2011-08-09 09:43:07 Post #3 xxdrago

 
Wystarczy , że dodam to po każdym zapytaniu tak? Czy wystarczy jak raz to dodam?
mysql_real_escape_string($email)

2011-08-09 12:24:03 Post #4 nospor

 
mysql_real_escape_string wykonuje się na zmiennych a nie na zapytaniu

2011-08-09 12:41:43 Post #5 xxdrago

 
Czyli raz wystarczy?

2011-08-09 12:44:30 Post #6 xxdrago

 
no i czy miejsce ma znaczenie? Przed zapytaniem czy po?

2011-08-09 12:53:17 Post #7 nospor

 
Oczywiście, że przed. Po to już jest po ptokach.
Na necie pełno jest informacji na temat sqlinjection. Poczytaj bo leżych na totalnych podstawach w tej kwestii.

2011-08-09 13:05:27 Post #8 xxdrago

 
mysql_real_escape_string($email); 
mysql_query("DELETE FROM mailing WHERE email='$email'") 
or die('Błąd zapytania: '.mysql_error()); 
echo "<p> <img class='tick' src='img/tick.png' alt='' />Twój e-mail został usunięty z naszej bazy.</p>"; 
}


Czyli jak zrobię coś takiego to się przed tym obronie?

Własnie szukam i nic ciekawego nie mogę znaleźć

2011-08-09 13:06:36 Post #9 nospor

 
Miej litość.... zajrzyj do manuala i poczytaj o funkcjach których używasz. Masz tam nawet przykłady.....


Nie:
mysql_real_escape_string($email);
a:
$email = mysql_real_escape_string($email);

2011-08-09 13:08:40 Post #10 xxdrago

 
A i jeszcze jedno:
http://php.net/manual/en/function.mail.php

da sie funkcja mail wysłać e-maile do kilka osób?

2011-08-09 13:14:43 Post #11 nospor

 
Tak, nagłowki Cc oraz Bcc do tego słuzą.

2011-08-09 13:15:57 Post #12 xxdrago

 
A czy to bedzie ekonomiczne jeśli wyśle e-mail do 4000tysięcy osób?

Doba nie wiem co ja napisałem

Może tak jak można wysłać to ekonomicznie?

2011-08-09 13:22:26 Post #13 nospor

 
Jeśli piszesz newsletter, to maila wysyłą się każdej osobie z osobna. Tylko nie śle się tego wszystkiego na raz, ale np. po 50, potem przerwa 10 minut i znowu 50 i itd

Tu o tym pisałem
[url="http://forum.nospor.pl/programowanie/php/mailing-mail-do-duzej-liczby-osob-ft65.html"]mailing[/url]

2011-08-09 13:27:05 Post #14 xxdrago

 
A tą funkcja w php mam wysyłać? Czy są jakieś specjalne? nie funkcje tylko biblioteki

2011-08-09 15:11:37 Post #15 nospor

 
Wysyłaj czym ci wygodnie. Mi wygodnie wysyłać przy pomocy PHPMailer

2011-08-15 06:27:21 Post #16 gość_Drraven

 
Wyślij do 100 osób, zrób przerwę i znów do stu -> robisz tak cały czas, aż skończą ci się rekordy w bazie

możesz też dodać htmlspecialchars() i kilka innych pomocniczych funkcji.


----------------------------------------------------------
Drraven
forumweb.pl

Odpowiedz

Ostatnio komentowane

  1. ShoutBox Podświadomość
  2. ShoutBox Trilux
  3. ShoutBox morelowy-dolomit
  4. ShoutBox Lucidoremi
  5. ShoutBox Goran Lezczek
  6. ShoutBox Ktos
  7. Opcje dwuwartościowe... gosc

Ostatnio na forum

  1. Poszukiwany Webdevel... Rafał
  2. Prolem z biblioteką ... ele
  3. Programista/ka PHP, ... Kamil
  4. ilość wczytywanych m... boob
  5. Humor Masłan
  6. Humor Enynsenes
  7. Humor KLOFMDMANELLIGGLOOSK

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer