(1398/12/18، 08:57 عصر)""M.gh نوشته است: سلام
یک سوال کوچولو ی دیگه داشتم ، مثلا دیتابیس ما به این شکل :
name score
1330 mahdi
بعد الان سوال من اینه که مثلا ما به یک فایل php به نام add داریم که وقتی به اون ایجوری پست می کنیم :
https//:rezamms.ir/add.php?add=4&name=mahdi
بعد تو نیم mahdi و تو add عددی که میخوایم به 1330 اضافه بشه که بشه 1334 .
حالا من از شما میخوام بی زحمت فایل php اش رو بدین 
در ضمن اینکه اومدی رکوردها رو همینطوری به صورت plaintext در داخل دیتابیس ذخیره کردی از نظر امنیتی درست نیست چرا که اگر هکر بتونه به دیتابیس تو نفوذ کنه همه چی براش هلو تو گلویه!
پس لازمه از متدهای رمزنگاری استفاده کنی حالا یا در سمت کانستراکت یا در سمت php...
میتونی از یک متد ساده ولی نسبتاً مناسب توی php به نام openssl استفاده کنی. کدش این شکلی میشه:
(بد نیست بدونی این روش همون رمزنگاری با AES-128 هست!)
کد php:
<?php
// تنظیم پارامترهای متد رمزنگاری openssl
$ciphering = "AES-128-CTR";
$iv_length = openssl_cipher_iv_length($ciphering);
$options = 0;
//تنظیم پارامتر iv
$encryption_iv = '1234567891011121';
// تنظیم کلید رمزنگاری
$encryption_key = 'U^9k~aQT%hWS<g)#x)2@mc7Yfn~bjmGdUKpAcy[QM^)=^6NC+CPb}/9>HEZ;fSA%Dwy>u!pq<=+)IGi[P;*(AbeZPzQ=pcKwaCb9#U![}fQYX)ul3n>N)!,8UscPD@;q';
// رمزنگاری عبارت دلخواه
$encrypted_string = openssl_encrypt($_GET['string'], $ciphering,
$encryption_key, $options, $encryption_iv);
echo $encrypted_string;
?>
خُب همینطور که میبینی میتونی کلیدرمزنگاری رو هر چی که خواستی قرار بدی و هر چی طولانی تر باشه بهتر. من یک عبارت تصادفی رو جنریت کردم و به عنوان کلید رمزنگاری قرار دادم که غیرقابل حدس باشه و هکر برای دستیابی به اون هم با حملاتی مثل بروت فورس و یا وردلیست نتیجه شاخصی نگیره.
در کدی که بالا نوشتم برای اینکه عبارت یا رشته موردنظرت رو به این روش رمز کنی کافیه یک ریکوئست با این فرمت ارسال کنی:
کد:
http://yourhost.com/file.php?string=x
به جای عبارت x میتونی هر چیزی که دلت خواست قرار بدی تا رمز بشه
اما خوبی این متد رمزنگاری اینه که قادر به رمزگشایی هم هستیم و مثل الگوریتم درهم سازی یا هش کردن پروسه یک طرفه نیست(البته میشه عبارات متداول رو De-Hash کرد در ضمن بعضی از متدهای هش کردن مثل md5 هم این روزا دیگه ایمن شناخته نمیشن)
کد رمزگشایی به این شکله:
کد php:
<?php
// تنظیم پارامترهای متد رمزنگاری openssl
$ciphering = "AES-128-CTR";
$iv_length = openssl_cipher_iv_length($ciphering);
$options = 0;
//تنظیم پارامتر iv
$decryption_iv = '1234567891011121';
// تنظیم کلید رمزگشایی
$decryption_key = 'U^9k~aQT%hWS<g)#x)2@mc7Yfn~bjmGdUKpAcy[QM^)=^6NC+CPb}/9>HEZ;fSA%Dwy>u!pq<=+)IGi[P;*(AbeZPzQ=pcKwaCb9#U![}fQYX)ul3n>N)!,8UscPD@;q';
// رمزگشایی عبارت دلخواه
$decrypted_string = openssl_decrypt ($_GET['string'], $ciphering,
$decryption_key, $options, $decryption_iv);
// نمایش عبارت رمزگشایی شده
echo $decrypted_string;
?>
با ارسال چنین ریکوئستی و قرار دادن عبارت رمز شده ای که در مرحله رمزنگاری دریافت کردی به جای x میتونی عبارت موردنظر رو رمزگشایی کنی:
کد:
http://yourhost.com/file.php?string=x
فقط باید حواست باشه که برای رمزنگاری و رمزگشایی از یک کلید یکسان استفاده میشه توی این متد پس همین باعث میشه زیاد ایمن نباشه چون کلید عمومی و خصوصی در کار نیست و رمزنگاری متقارن محسوب میشه ولی در حد پروژه های معمول متد بدی نیست.
علاوه بر اون کدی که من نوشتم و کدی که دوستان زحمت کشیدن دادن در برابر حمله ای مثل SQL Injection ایمن نیست چرا که اگر کاربر کاراکترهای غیرمجازی رو که به عنوان کوئری MySQL تلقی بشه وارد کنه خیلی راحت میتونه کوئری های دلخواه خودش رو اعمال کنه. پس لازمه کاراکترهای ورودی رو روشون کنترل داشته باشی که یک وقت علائم غیر مجاز نداشته باشه حالا یا در سمت کانستراکت یا در سمت php که بهترین کار تنظیم در سمت php هست.