v2.5.2
Giriş yap

PHP ile id gönderirken şifreleme

hakancls
1,167 defa görüntülendi ve 5 kişi tarafından değerlendirildi

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?

Cevap yaz
Cevaplar (11)
tayfunerbilen
1276 gün önce

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.

yazilimyolcusu
298 gün önce

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.

yazilimyolcusu
298 gün önce

Şö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.

yazilimyolcusu
300 gün önce

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);
yazilimyolcusu
300 gün önce

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.

yazilimyolcusu
301 gün önce

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);
qplot
1274 gün önce

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 ?

yeni2021
1275 gün önce

konuya bakanlar detaya ulaşsın diye linkini bırakayım:

https://prototurk.com/makaleler/php-ile-verileri-sifrelemek

yeni2021
1276 gün önce

@tayfunerbilen hocam, bunun kullanımına dair örnek vidyonuz var mı?
lütfen sorumu bilgisizliğime verin, buradaki ornek-anahtar-123 nedir bunun yerine biz ne kullacağız.? gizli anahtar gibi bişi mi bu?

jct
1276 gün önce

@tayfunerbilen hocam encrypt işleminde genelde tavsiye edilen yöntem AES-256-CBC bunun ile senin örnek verdiğin AES-128-ECB arasında bariz bir fark varmı?

hakancls
1276 gün önce

Çok teşekkür ederim