PHP ile id gönderirken şifreleme
Merhabalar sitemde PHP ile yorum yapma kısmında blog yazısının id değerini hidden olarak gönderiyorum ancak kaynak kodlarda id kısmı kabak gibi gözüküyor ve bu da beni rahatsız ediyor bunu başka bir şekilde yada şifreleyerek göndermem mümkün müdür?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (11)
mümkün evet. işte encode ve decode için birer fonksiyon
function encrypt($string, $key) {
return openssl_encrypt($string, "AES-128-ECB", $key);
}
function decrypt($string, $key) {
return openssl_decrypt($string, "AES-128-ECB", $key);
}
id'yi artık bir key
değeri ile şifreleyip gönderebilirsin.
<input type="hidden" name="id" value="<?=encrypt($id, 'ornek-anahtar-123')?>">
Bu id değerini alsa bile elinde ornek-anahtar-123
değeri yoksa şifreyi geri açamayacaktır. Post ettiğin tarafta ise şöyle kontrol edebilirsin;
$id = decrypt($_POST['id'], 'ornek-anahtar-123');
if (!$id){
return 'hatalı id değer gönderdiniz';
}
Eğer birileri hile yapıp öyle rastgele id değeri gönderecek olurlarsa yine çalışmayacaktır, çünkü şifreli bir değer ve bu değerin anahtar değerinin ornek-anahtar-123
olması bekleniyor aksi halde id false dönecektir.
Merhaba arkadaşlar. Şu kodu internetten buldum, çalıştı. Yalnız bana şunların ne olduğunu anlatabilirseniz sevinirim.
$id = $listele["id"];
$ciphering = "AES-128-CTR";
$iv_length = openssl_cipher_iv_length($ciphering);
$options = 0;
$encryption_iv = '8569748526325697';
$encryption_key = "sifre alani";
echo $encryption = openssl_encrypt($id, $ciphering, $encryption_key, $options, $encryption_iv);
Mesela, openssl_cipher_iv_length : Şifre başlatma vektörü uzunluğunu alır, diyor internette. Şifre başlatma vektörü nedir?
Mesela, option ne işe yarıyor burada?
Yani çalışma mantığını anlamak için soruyorum ve ne olduklarını.
Aşağıdakileri anladım.
AES-128-CTR : Şifreleme metodu.
sifre alani : Şifrelediğimiz veriyi açmamızı sağlayan anahtar.
Şöyle anlayayım. id'yi input ile değil a tag'iyle gönderiyorum. a tag'ine encrypt yazdığımda, listele.php sayfasındaki düzenle butonum kayboluyor. Aşağıdaki şekilde.
<a href="bastakiresimduzenle.php?bastakiresimduzenle=<?php echo encrypt($bastakiresim_goster['bastakiresim_id']); ?>&bastakiresimklasordensil=<?php echo $bastakiresim_goster['bastakiresim_resim']; ?>">
<img src="icons/edit.png" title="Düzenle" />
</a>
Bir de bu fonksiyonu ben bu koda nasıl uyarlayacağım anlayamadım. Yani $string değişkenini a tag'inde nereye koyacağım echo nun arkasına mı? Yani
echo $string
şeklinde mi kullanacağım.
Söylediğim şeyler aşağıda.
listele.php
<a href="bastakiresimduzenle.php?bastakiresimduzenle=<?php
$resimid = $bastakiresim_goster['bastakiresim_id'];
$karisik_kodlar_duzenle = 'AES-128-ECB';
$sifre_duzenle = 'sifre.1000.password';
echo openssl_encrypt($resimid, $karisik_kodlar_duzenle, $sifre_duzenle);
?>&bastakiresimklasordensil=<?php
$resimsil = $bastakiresim_goster['bastakiresim_resim'];
$karisik_kodlar_duzenlesil = 'AES-128-ECB';
$sifre_duzenlesil = 'sifre.1000.password';
echo openssl_encrypt($resimsil, $karisik_kodlar_duzenlesil, $sifre_duzenlesil);
?>">
<img src="icons/edit.png" title="Düzenle" />
</a>
duzenle.php
$id_duzenlee = $_GET['bastakiresimduzenle'];
$karisik_kodlar_duzenle = 'AES-128-ECB';
$sifre_duzenle = 'sifre.1000.password';
$sifre = openssl_decrypt($id_duzenlee, $karisik_kodlar_duzenle, $sifre_duzenle);
$id_duzenlesil_sonuc = $_GET['bastakiresimklasordensil'];
$karisik_kodlar_duzenlesil = 'AES-128-ECB';
$sifre_duzenlesil = 'sifre.1000.password';
$resim = openssl_decrypt($id_duzenlesil_sonuc, $karisik_kodlar_duzenlesil, $sifre_duzenlesil);
Bir şey farkettim. Bir resmi güncelledikten sonra tekrar güncellemek istediğimde güncelleme sayfasının verileri gelmiyor. Tarayıcıda şifrelenmiş "id" görünüyor ama güncelleme yapacağım form elementleri gelmiyor.
Tayfun bey şöyle bir örnek koymuş siteye. Ben, düzenleme ve sil işlemini "a.php" sayfasında yapıyorum. "Get" metoduyla gelen id'yi düzenleme yapmak için şifreliyorum. Verileri şifreleyip düzenlemeyi yapıyorum. Sil alanına ise farklı değişkenlerle aynı kodları yazıyorum. O da çalışıyor. Sonra bilgisayarı kapatıp açtığımda bir önceki işlemleri yapamıyorum. Bir diğeri, "a.php" için kullandığım kodları "b.php" için de kullanıyorum çalışmıyor. Farklı değişkenlerle yapıyorum farklı şifre ile kullanıyorum çalışıyor. Bilgisayarı kapatıp açtığımda çalışanlar da çalışmıyor. Yani "id" şifreleyeceksem "düzenle.php" ye tıkladığımda gelen veri lazım bana. İşin içinden çıkamadım.
$data = 'prototurk.com';
$cipher = 'AES-128-ECB';
$key = 'prototurk.2021.xx1';
$encoded = openssl_encrypt($data, $cipher, $key);
$data = 'prototurk.com';
$cipher = 'AES-128-ECB';
$key = 'prototurk.2021.xx1';
$decoded = openssl_decrypt($data, $cipher, $key);
Youtube de sordum ama buyuk ıhtımalle gormeyeceksın tayfun
Bunu yaklaşık 1 senedir üye telefon numaraları ve T.C. leri şifrelemek için kullanıyorum.
LAKİN : sonuçta bu işten anlayan az insan var ve bunu tartışacak kimsede yok.
Hazır yapmışken bir şey sorayım
Ben anahtarı yani keyi farklı sunucuda tutup şifrelemeyi o sunucuya istek atıp güvenli şekilde nasıl çözerim ?
konuya bakanlar detaya ulaşsın diye linkini bırakayım: