lostyazilim
tr.link

PHP güvenlik önlemleri

15 Mesajlar 1.910 Okunma
lstbozum
tr.link

ugurgunes19 ugurgunes19 WM Aracı Kullanıcı
  • Üyelik 04.07.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web Developer
  • Konum İstanbul Avrupa
  • Ad Soyad U** G**
  • Mesajlar 52
  • Beğeniler 6 / 5
  • Ticaret 0, (%0)
Merhaba arkadaşlar ben php'de veri tabanından veri çekerken şu şekilde çekiyorum.

$a = "12_Ug_198nTu";
echo htmlspecialchars(sha1(sha1(md5(md5(md5($a))))));
?>

Ekranada şu şekilde yazdırdım görün diye

Çıktı:
8e620546e08031137bee1296097d61e17cdefef6

Bu şekilde kullanmamın bir sıkıntısı var mı? Sistem yavaşlar mı?
 

 

başarmak istiyorsan önce kendine inan, gerisi gelir.
wmaraci
reklam

mxaksoy mxaksoy Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 23.03.2018
  • Yaş/Cinsiyet 29 / E
  • Meslek Webmaster
  • Konum İstanbul Avrupa
  • Ad Soyad M** A**
  • Mesajlar 1358
  • Beğeniler 482 / 344
  • Ticaret 3, (%100)
htmlspecialchars kullanın SQL açığı olmaz
 

 

ugurgunes19 ugurgunes19 WM Aracı Kullanıcı
  • Üyelik 04.07.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web Developer
  • Konum İstanbul Avrupa
  • Ad Soyad U** G**
  • Mesajlar 52
  • Beğeniler 6 / 5
  • Ticaret 0, (%0)
kullanılabilir bir şey ama ben veri çekmekten bahsediyorum
 

 

başarmak istiyorsan önce kendine inan, gerisi gelir.

mxaksoy mxaksoy Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 23.03.2018
  • Yaş/Cinsiyet 29 / E
  • Meslek Webmaster
  • Konum İstanbul Avrupa
  • Ad Soyad M** A**
  • Mesajlar 1358
  • Beğeniler 482 / 344
  • Ticaret 3, (%100)
MySQL fetch assoc
 

 

wmaraci
wmaraci

netpisiko netpisiko Güneşli Günler. Kullanıcı
  • Üyelik 29.04.2014
  • Yaş/Cinsiyet 29 / E
  • Meslek Web Developer
  • Konum İstanbul Anadolu
  • Ad Soyad A** K**
  • Mesajlar 300
  • Beğeniler 11 / 79
  • Ticaret 0, (%0)
veritabanı kullanırken PDO kullanırsanız bu kadarına gerek kalmaz.

ÖR:

$pass = crypt($_POST["password"]); // tek yönlü çok güçlü şifreleme yöntemi
$user_id = 1;
$q = $db->pdo->prepare('SELECT pass FROM users WHERE id = :id');
$q->bindValue(':id', $user_id, PDO::PARAM_INT);
$q->execute();


Login Kontrolü

$password = $_POST["password"];
$username = $_POST["username"];

$pass_crypt = $db->query("SELECT pass FROM users WHERE username = '{$username}'")->fetch(PDO::FETCH_ASSOC);

if (crypt($password, $pass_crypt) == $pass_crypt) {
echo "Parola doğru!";
}


Kodları biraz aceleyle yazdım hata olabilir sen mantığına bak.
 

 

kaanst kaanst Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 28.02.2018
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Developer
  • Konum İstanbul Avrupa
  • Ad Soyad K** S**
  • Mesajlar 669
  • Beğeniler 435 / 160
  • Ticaret 31, (%94)
Bir de mysqli_real_escape_string ile çalışan fonksiyon oluşturup değeri öyle kullanın.

Örnek:

function esc($string)
{
return mysqli_real_escape_string($string);
}


Kullanım:

esc('metin');
 

 

ramazayn ramazayn WM Aracı Kullanıcı
  • Üyelik 11.10.2017
  • Yaş/Cinsiyet 25 / E
  • Meslek Öğrenci
  • Konum Bursa
  • Ad Soyad R** U**
  • Mesajlar 614
  • Beğeniler 19 / 251
  • Ticaret 9, (%100)
Ben bu şekilde kullanıyorum

$ogrencisor=$db->prepare("SELECT * from ogrenci where ogrenci_id=:id");
$ogrencisor->execute(array(
'id' => $_GET['ogrenci_id']
));

$ogrencicek=$ogrencisor->fetch(PDO::FETCH_ASSOC);
 

 

Decimas Decimas WM Aracı Kullanıcı
  • Üyelik 19.04.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Developer
  • Konum İstanbul Avrupa
  • Ad Soyad E** E**
  • Mesajlar 820
  • Beğeniler 1 / 302
  • Ticaret 1, (%100)

mxaksoy adlı üyeden alıntı

htmlspecialchars kullanın SQL açığı olmaz


htmlspecialchars sadece ufak bir önlem, %100 güvende değilsin bu şekilde.

Önerim get, post gibi işlemlerde bu tip bir mantıkla gidilmesi.


/*--------------------- $_GET & $_POST ----------------- START */

// Secure via $_GET
public function get($parameter){
return !isset($_GET[$parameter]) ? false : strip_tags(trim(addslashes(htmlspecialchars($_GET[$parameter]))));
}

// Secure via $_POST
public function post($parameter){
if (!empty($_POST[$parameter])) {

if (is_array($_POST[$parameter])) {
$request = array();
foreach ($_POST[$parameter] as $param)
$request[] = htmlspecialchars(addslashes(trim($param)));
return $request;
}
return htmlspecialchars(addslashes(trim($_POST[$parameter])));
}
return false;
}

/*--------------------- $_GET & $_POST ----------------- END */


Ayrıca

ugurgunes19 birbirini tekrarlayan gereksiz kullanımlardan kaçınmalısın ve md5 ve sha1 yerine sha512 kullanırsan daha iyi bir sonuç alabileceğine inanıyorum çünkü md5 ve sha1 hakkında pek iyi şeyler söylenmiyor, kırıldı, eskisi kadar güvenli değil vs. Sonuçta işlem kapasitesi gelişen makineler için saatler bile sürebilir kırılmaları.

Sha512 128 karakterlerlik bir sonuç üretir, tek başına ekstrem durumlar için yeterli olmasa da en azından hash işini görür.


$hashed = hash('sha512', $data);
mxaksoy

kişi bu mesajı beğendi.

no time for caution

mxaksoy mxaksoy Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 23.03.2018
  • Yaş/Cinsiyet 29 / E
  • Meslek Webmaster
  • Konum İstanbul Avrupa
  • Ad Soyad M** A**
  • Mesajlar 1358
  • Beğeniler 482 / 344
  • Ticaret 3, (%100)
Decimas değerli yorumunuz için teşekkür ederim hocam artık projelerimde sha512 kullanacağım.
 

 

ontedi ontedi www.ontedi.com Kullanıcı
  • Üyelik 03.10.2013
  • Yaş/Cinsiyet 44 / E
  • Meslek Yazılım Uzmanı, Matematikçi
  • Konum Ankara
  • Ad Soyad S** T**
  • Mesajlar 1118
  • Beğeniler 325 / 324
  • Ticaret 2, (%100)
Hocam, MD5 tarzı şifreleme bile başlı başına yeterken heyecana gerek yok. MD5'in hash oluşturma senaryosunu görsen zaten çözülemeyeceğini anlarsın.

Brute Force bir çözme yöntemi değildir. Geriye dönüşü olmayacak şekilde olan bir şeyden bahsediyoruz.
HapyMan

kişi bu mesajı beğendi.

www.ontedi.com
www.cizgi.site
wmaraci
wmaraci
Konuyu toplam 2 kişi okuyor. (0 kullanıcı ve 2 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al