PDA

View Full Version : سوال: برای امنیت کد های PHP چه راه حل هایی وجود داره؟



nilmil_nil
چهارشنبه 30 شهریور 1390, 17:42 عصر
سلام
دوستان واسه اینکه کد های PHP مون رو کسی نبینه چه کاری باید بکنیم
مثلا یه Page که به دیتابیس وصل میشه اگه یه یوزر یا بهتر بگم هکر ببینه که فاتحه سایت خوندست

binyaft
چهارشنبه 30 شهریور 1390, 19:13 عصر
PHP Encoder
سرچ ، سرچ ، سرچ

armitakarimi
سه شنبه 15 فروردین 1391, 16:02 عصر
بعشی از قابلیت ها برای ما مهمه ،مثل رمز ها ی بانک ها ، پسورد ها و ... که راهای مختلفی داره ، مثلا برای رمز عبور از هش استفاده می کنن ، برای رمز های قابل بازیابی از الگوریتم های aes استفاده می کنن و ...

armsoftpc
سه شنبه 15 فروردین 1391, 23:14 عصر
به نام خدا
با سلام
تقریبا تمامی اینکودر هایی که تا به حال من دیدم، دیکدرش هم هست و اصلا به نظر من بدرد نمی خوره!

مثلا یه Page که به دیتابیس وصل میشه اگه یه یوزر یا بهتر بگم هکر ببینه که فاتحه سایت خوندست
اولا هکر ها نمی توانند به سادگی به کدها دسترسی داشته باشند ، Cpanel که بوق نیست!!!!:عصبانی++:
دوما چرا این رو می گی ، مثلا من بخوام یه کدی رو به کسی بدم ، که نخوام سورسش رو بفهمه یا می خوام یه کدی رو به شرکتی بفروشم که بعد مدتی باطل شه!
حالا راه حل چیست؟:متفکر:
راه حل را خود من هم که 2 سال است با php کار می کنم ، هم نمی دونم.:کف:
با هر اینکودر که اینکد می کنم ، تا یه سرچی می کنم ، دیکدرش هست تازگی هم که دیکدر md5 نیز منتشر شده است که دیگر اطلاعات اینکد شده با این پسوند بی اعتبار می شوند.
اگر کسی encoder رو مثل ionCube.PHP.Encoder (منظور قابلیت هاش مثل تریال کردن کدها و...) می شناسه ، بگه تا ما هم بهره ببریم و دعا به جونش کنیم!!!:لبخند:

lady64
چهارشنبه 16 فروردین 1391, 10:05 صبح
اولا هکر ها نمی توانند به سادگی به کدها دسترسی داشته باشند ، Cpanel که بوق نیست!!!!:عصبانی++:

میشه در مورد cpanel توضیح بدید.منظور اینه که کنترل پنل مدیریت ساخته بشه ؟ زیاد دیدم از cpanel صحبت شده اما منظور رو متوجه نشدم.ممنون میشم توضیح بدید.:لبخندساده:

mohsen24000
چهارشنبه 16 فروردین 1391, 11:36 صبح
cpanel یکی از پنلهای مدیریت هاست تحت لینوکس هست...
برای انجام تنظیمات هاست، عملیات مربوط به بانک اطلاعات و ...

mtchabok
چهارشنبه 16 فروردین 1391, 12:01 عصر
سلام
دوستان واسه اینکه کد های PHP مون رو کسی نبینه چه کاری باید بکنیم
مثلا یه Page که به دیتابیس وصل میشه اگه یه یوزر یا بهتر بگم هکر ببینه که فاتحه سایت خوندست

سلام
اگه کسی بتونه cpanel رو هک کنه که دیگه نیازی به رمز عبور شما نداره . خیلی ساده توسط همون cpanel خیلی کارها میتونه بکنه .
شما سعی کنین که در برنامه نویسی که انجام میدین فایلهای تنظیمات سایتتون رو خارج از محیط public قرار بدین .

zerocool.3830
چهارشنبه 16 فروردین 1391, 22:02 عصر
مشکل اصلی شما دوستان عزیز اینه که مفهوم PHP رو نفهمیدید.
PHP زبان Open Source هست. خود Open Source بودن هم کلی مفهوم داره که باید برید دنبالش تا درک درستی ازش پیدا کنید.
کار شما مثل اینه که می خواهید برید دریا و ساق پاهاتون هم خیس نشه.
به نظرم تاپیک غیر از بحث امنیتی اولش دیگه مفهوم صحیحی نداره

Beginner2013
چهارشنبه 16 فروردین 1391, 22:48 عصر
مشکل اصلی شما دوستان عزیز اینه که مفهوم PHP رو نفهمیدید.
PHP زبان Open Source هست. خود Open Source بودن هم کلی مفهوم داره که باید برید دنبالش تا درک درستی ازش پیدا کنید.
کار شما مثل اینه که می خواهید برید دریا و ساق پاهاتون هم خیس نشه.
به نظرم تاپیک غیر از بحث امنیتی اولش دیگه مفهوم صحیحی نداره

ببخشید ولی من فک کنم شما مفهموم open source رو خوب نفهمیدید.

ali2k5
شنبه 19 فروردین 1391, 16:58 عصر
مشکل اصلی شما دوستان عزیز اینه که مفهوم PHP رو نفهمیدید.
PHP زبان Open Source هست. خود Open Source بودن هم کلی مفهوم داره که باید برید دنبالش تا درک درستی ازش پیدا کنید.
کار شما مثل اینه که می خواهید برید دریا و ساق پاهاتون هم خیس نشه.
به نظرم تاپیک غیر از بحث امنیتی اولش دیگه مفهوم صحیحی نداره


php زبانی است که open source ارائه شده یعنی خود php که روی سرور نصب می کنید یا هرجای دیگه استفاده می کنید اپن سورس هست برای واضح تر شدن منظور این هست که زبان php با سورس باز در اختیارتان قرار گرفته در سایت www.php.net

ولی

منظور این نیست که هرکسی به زبان php برنامه نویسی می کند پس باید open source برنامه ای که نوشته را ارائه کند ، هر کسی اختیار این را دارد که برنامه ای که نوشته چه یک خط چه هزار خط به هرشکلی که مایل هست ارائه کنه یا مجانی یا اپن سورس یا پولی یا ...


مفهوم PHP رو نفهمیدید.

شما که php را فهمیدی عجیبه این مطلب را متوجه نشدی ...

AmirSky
شنبه 19 فروردین 1391, 18:24 عصر
فکر کنم این ایده که بعضی پیجها از هاست های دیگه اینکلود بشن بد نباشه

نظر شما چیه؟

hassanzanjani1374
شنبه 19 فروردین 1391, 19:18 عصر
اینم نمیشه . با اینکلود فایل میشه به سورسش دسترسی داشته باشی . به نظر من بهترین کار اینه که شما بیای یک سرور بگیری و تمام اسکریپت ها رو روی اون سرور به کاربرات ارائه بدی که باز تامین امنیت اون سرور هم کار حضرت فیل هست .

یکی به من بگه تو دنیای امروز مفهوم امنیت چیه ؟؟؟ سایت بانک تجارت با اون عظمتش رو هک کردن ما که هیچی ...

armsoftpc
چهارشنبه 23 فروردین 1391, 16:11 عصر
به نام خدا
با سلام

اگه کسی بتونه cpanel رو هک کنه که دیگه نیازی به رمز عبور شما نداره . خیلی ساده توسط همون cpanel خیلی کارها میتونه بکنه .
شما سعی کنین که در برنامه نویسی که انجام میدین فایلهای تنظیمات سایتتون رو خارج از محیط public قرار بدین .
تقریبا هیچ کسی نمی تونه سی پنل رو هک کنه!!! (حداقل ایرانی ها نمی تونند ، همچین کاری بکنند.)، چون با پروتکل ssl از ارسال و دریافت اطلاعات استفاده میشه!

مشکل اصلی شما دوستان عزیز اینه که مفهوم PHP رو نفهمیدید.
PHP زبان Open Source هست. خود Open Source بودن هم کلی مفهوم داره که باید برید دنبالش تا درک درستی ازش پیدا کنید.
کار شما مثل اینه که می خواهید برید دریا و ساق پاهاتون هم خیس نشه.
دوست عزیز حرف های شما درست ، اما این حرف ها رو بذار دم کوزه آبش رو بخور.:لبخند:(شوخی میکنم.)
آیا من حاصل تلاش و زحمتی که بابت کدی برای فروش را نوشته ام باید مجانی در اختبیار همگان قرار دهم، اونوقت یک ریال که گیر من نمی آید.توی ایران تا وابستگی هست ، پول هم هست.
وقتی بهت نیاز نداشته باشند ، میندازنت دور!

سایت بانک تجارت با اون عظمتش رو هک کردن ما که هیچی ...
کدوم عظمت ، هر وقت گوگل یا امثال اون رو هک کردند باید بترسیم، یه نگاه به اکثر بانک ها بیاندازید ، سایت هاش یکی از یکی ضعیف تر است (البته به جز پارسیان و برخی دیگر).
البته این رو هم بگم ، که ایران توی چند سال توی عرصه شبکه پیشرفت های زیادی کرده.

در ضمن آیا کسی اینکودری را پیدا نکرده است که دیکدرش وجود نداشته باشه؟؟:اشتباه:

MostafaEs3
چهارشنبه 23 فروردین 1391, 18:10 عصر
ببین اگه سایت بصورت استاندارد نوشته شده باشه و باگهای امنیتی بسته شده باشه هک نمیشه ... همینطور سرور باید کاملا حرفه ای کانفیگ شده باشه و فایروال روش باشه ... بطور مثال فیسبوک رو کسی نمیتونه هک کنه چون کدنویسی پیچیده و استاندارد داره

در مورد انکودر هم بهترینش لودر گاردین هستش که برای دیکدش از IonCube بیشتر پول میگیرن ... البته باید حتما روی هاست لودر نصب باشه

hassanzanjani1374
چهارشنبه 23 فروردین 1391, 18:44 عصر
هک نشدن فیسبوک دلیل داره . دلیلشم اینه که وقتی شما تو فیسبوک لاگین میشی نمیاد یک سری کد ها رو اجرا کنه بلکه میاد از طریق دستورات بش برای هر شخص یک کد اختصاصی می سازه و اون رو اجرا میکنه .
در ضمن یاهو رو هم یکبار هک کردن ، گوگل رو نمیدونم .

msd950
چهارشنبه 23 فروردین 1391, 22:22 عصر
سلام. من چند تا راه بهت پیشنهاد می کنم . البته اینا تجربیات شخصی منه :

1- بهترین کنترل پنل برای هاست (از لحاظ امنیت) کنترل پنل پلسک هست که می تونید ازش استفاده کنید.
2- کدهای خودتون رو obfuscate کنید. اینجوری فهم کدها برای هکر ها دشوار میشه و همچنین سرعت اجرای اسکریپت هاتون بالا میره.
3- در اسکریپت های خودتون error_reporting رو به 0 تنظیم کنید که هیچ خطایی در صفحات نمایش داده نشه چرا که در غیر اینصورت شناسایی باگهای اسکریپت شما برای هکر خیلی راحت میشه...
4- پسوردهایی که توی دیتابیس ذخیره میکنین با توابعی همانند md5 یا sha1 هش کنید و سپس اونارو تو دیتابیس بریزین.
5- برای هش کردن هم از یک کلمه رمز + پسورد استفاده کنید,در زمان بازیابی رمز مجداد از کلمه رمز + پسورد استفاده کنید.با این کار هیچ دیکدری نمیتونه پسورد شما رو دیکد کنه. مثلا !er32r23rPASSWORD

armsoftpc
پنج شنبه 24 فروردین 1391, 15:53 عصر
به نام خدا
با سلام

در مورد انکودر هم بهترینش لودر گاردین هستش که برای دیکدش از IonCube بیشتر پول میگیرن ... البته باید حتما روی هاست لودر نصب باشه
هاست من به صورت اشتراکی (فقط سی پنل داره) است ، چطور نرم افزار را نصب کنم، اگر می خواهید بگویید به مسئولان سایت بگم تا نصبش کن ، این رو بگم که اگه مخالفت کردند ، آن وقت چه؟
توی این اینکودر ها کدومشون نیاز به نصب نداره و پیش فرض همراه php!

hassanzanjani1374
پنج شنبه 24 فروردین 1391, 19:24 عصر
2- کدهای خودتون رو obfuscate کنید. اینجوری فهم کدها برای هکر ها دشوار میشه و همچنین سرعت اجرای اسکریپت هاتون بالا میره.


در مورد این یکم بیشتر توضیح بدین لطفا

mosi2007
جمعه 25 فروردین 1391, 10:30 صبح
ببخشید مزاحم شدم
1=منم یه سوال داشتم سوالم اینه که سایتی که ساختیم رو در لوکال باید انکودر کنیم و انتقال بدیم به هاست یا کار دیگه ای باید انجام بدیم اصلا چطوریه روش کار با انکودر ؟؟؟؟؟؟؟

من یه سایت تو لوکال دارم که فعلا برای اینکه امنیتش رو قوی نکردم نذاشتم تو هاست
من اول داده ها رو که از کاربر میگیرم با htmlentites وارده دیتابیس میکنم
پسورد ها هش میشه
بعد توی هر صفحه اجازه ورود به کاربرانی که ثبت نام نشده نمیدم و اونا رو به صفحه ثبت نام ریدایرکت میکنم
2=من تا حالا این سه تا کارو انجام دادم کاره دیگه ای مونده به جز انکودر که باید برای امنیت سایت انجام بدم ؟؟؟؟؟؟؟؟
3=ایا با فایل htaccess هم میتونم روی سایت امنیتو برقرار کنم و چطوری با چه کدی ؟؟؟؟؟؟؟
4=روی هاست چطوری میشه firewall کاشت و همه هاستها این امکانو داره یا نه ؟؟؟؟؟؟؟

اگه میشه به این 4 تا سوال من هم جوا ب بدین مـــــــــمنـــــــــون میشم

lady64
جمعه 25 فروردین 1391, 16:25 عصر
1=
من اول داده ها رو که از کاربر میگیرم با htmlentites وارده دیتابیس میکنم


من در این مورد از این تابع استفاده میکنم .


function AntiInject( $Source ){
$Source = htmlspecialchars(trim($Source ));
if(! get_magic_quotes_gpc() ) {
$Source = addslashes( $Source );
}
return mysql_real_escape_string(stripslashes($Source));
}

که شرح این تابع در این قسمت بحث شده :
http://barnamenevis.org/showthread.php?329684-شرح-یک-تابع&p=1450890#post1450890

eshpilen
جمعه 25 فروردین 1391, 16:36 عصر
من اول داده ها رو که از کاربر میگیرم با htmlentites وارده دیتابیس میکنم
mysql_real_escape_string رو هم باید بکار ببرید.

پسورد ها هش میشه
دقیقا با چه الگوریتمی؟
اگر بخواد اصولی باشه باید سالت رندوم و Key stretching داشته باشه. اگر pepper هم داشته باشه بازم بهتره.
ضمنا از md5 و sha1 استفاده نکنید و بجاش از sha256 استفاده کنید.


بعد توی هر صفحه اجازه ورود به کاربرانی که ثبت نام نشده نمیدم و اونا رو به صفحه ثبت نام ریدایرکت میکنم
ریدایرکت با هدر location؟
توجه کنید که این هدر به تنهایی جلوی دسترسی هکرها رو نمیگیره. این هدر به مرورگر یا برنامهء سمت کلاینت میگه چکار کنه، اما اون برنامه لزوما از این دستور تبعیت نمیکنه و میتونه تحت کنترل هکر باشه.
باید قبل از اینکه هرگونه اطلاعات محرمانه ای echo بشه از دستوری مثل exit هم استفاده کنید، و هیچوقت روی تبعیت کلاینت از هدرها و دستوراتی که بهش ارسال میکنید اتکا نکنید.


2=من تا حالا این سه تا کارو انجام دادم کاره دیگه ای مونده به جز انکودر که باید برای امنیت سایت انجام بدم ؟؟؟؟؟؟؟؟
امنیت خیلی گسترده تر و پیچیده تر از این حرفهاست که فکر کنید برای شما کار دیگه ای نمونده.
ضمنا خیلی باگها و حفره ها هست که به منطق و الگوریتم و جزییات کامل کدها برمیگرده و نمیشه با دوتا اسم لیست کردن و دوتا تابع پیشنهاد کردن حلشون کرد.


3=ایا با فایل htaccess هم میتونم روی سایت امنیتو برقرار کنم و چطوری با چه کدی ؟؟؟؟؟؟؟
اونم یه کاربردهایی داره. اما اول و بیشتر کد خود برنامه باید قوی و کامل باشه و حتی بدون htaccess هم باید امنیت خوبی داشته باشه. htaccess بیشتر باید بعنوان یک لایهء افزوده استفاده بشه.

lady64
جمعه 25 فروردین 1391, 18:31 عصر
باید قبل از اینکه هرگونه اطلاعات محرمانه ای echo بشه از دستوری مثل exit هم استفاده کنید، و هیچوقت روی تبعیت کلاینت از هدرها و دستوراتی که بهش ارسال میکنید اتکا نکنید.


میشه در این مورد بیشتر و با مثال توضیح بدید.

mtchabok
جمعه 25 فروردین 1391, 19:31 عصر
میشه در این مورد بیشتر و با مثال توضیح بدید.
منظورشون این هس که کلاینت مجبور به انجام دادن فرمانهای هدر نیست و می بایست به همراه دستورات اجرایی هدر از کدهای خاتمه دهنده اسکریپت استفاده کرد .
مثلا :

header('Location: /main.php');
echo 'hello';
کلاینت میتونه این دستور رو قبول نکنه و اسکریپت به کارش ادامه میده تا به خاتمه اش برسه . بنابراین بهتره که به اینصورت استفاده بشه :

header('Location: /main.php'); exit;
echo 'hello';

armsoftpc
شنبه 26 فروردین 1391, 11:52 صبح
به نام خدا
با سلام
دوستان متاسفانه به سوالم پاسخ ندادند.(اینکودر که دیکد نداشته باشه و نیاز به نصب نرم افزار در سرور نداشته باشه).

ضمنا از md5 و sha1 استفاده نکنید و بجاش از sha256 استفاده کنید.
من کرکر md5 را در اینترنت دیده ام ، اما تا به حال sha1 را نه، اگر از sha256 استفاده کنیم ، آیا باعث کاهش سرعت در اینکود می شود، و اگر سرعت کاهش نمی یابد ، خوب از sha512 استفاده کنیم.
آیا برای استفاده از sha256 نیاز به نصب افزونه ای است.(که فکر کنم که هست ، چون این تابع کار نمی کند.)

eshpilen
شنبه 26 فروردین 1391, 12:37 عصر
من کرکر md5 را در اینترنت دیده ام ، اما تا به حال sha1 را نه، اگر از sha256 استفاده کنیم ، آیا باعث کاهش سرعت در اینکود می شود، و اگر سرعت کاهش نمی یابد ، خوب از sha512 استفاده کنیم.
آیا برای استفاده از sha256 نیاز به نصب افزونه ای است.(که فکر کنم که هست ، چون این تابع کار نمی کند.)
md5 و sha1 رو کلا سعی کنید کنار بذارید. چون هردو بیش از حد قدیمی و ضعیف هستن. درواقع هردو از دید مختصصان شکسته شده بحساب میان. البته از این الگوریتم ها بعضی استفاده های خاصی هنوز صورت میگیره، ولی آدم باید اطلاعات/تخصصش رو داشته باشه که بدونه کجا اون ضعفهایی که دارن ارتباطی به مورد استفادهء خاص نداره و مشکلی ایجاد نمیکنه. تازه این موارد هم ممکنه یه جورایی مشکوک و روزهء شک دار گرفتن باشن و بنابراین بهتره حتی الامکان از استفاده ازشون پرهیز بشه.

از sha512 هم میتونید استفاده کنید، ولی همون 256 هم کاملا کافیه بنظر بنده. اینطور نیست که فکر کنید چون یکیش 512 هست که دو برابر 256 است پس امنیت 256 پایینه. برای برنامه ها و کاربردهای معمولی شما و امنیتی که شما نیاز دارید همون 256 هم کافیه و احتمالا خیلی بیش از نیاز هم هست. بقیهء امنیتش بیشتر جاهای دیگر و در کاربردهای دیگر و در مسائل High security اهمیت داره. بنده از نظر تئوریک و عملی ضرورتی در استفاده از 512 نمیبینم. و 512 باعث میشه حجم هر هش شما دوبرابر بشه و رکورد هر کاربر در دیتابیس حجیم تر بشه و همینطور هرجای دیگری که ازش استفاده خواهد شد.
ضمنا در نسخه های PHP که خیلی قدیمی نباشن میتونید براحتی از این الگوریتم ها استفاده کنید به این شکل:

hash('sha256', $str);
برطبق رفرنس، این تابع از PHP 5.1.2 موجود میباشد.

armsoftpc
شنبه 26 فروردین 1391, 12:47 عصر
به نام خدا
با سلامی دوباره
قانع شدم ، آیا شما اینکودری می شناسید تا دیگه هک نشه!

eshpilen
شنبه 26 فروردین 1391, 13:22 عصر
بنده از این روش در پروژهء خودم استفاده کردم:

<?php

$secure_hash_rounds=16;

$pepper="89JPa36HW7Uiq348dX10ks";

//==================================

$request_entropy=sha1(microtime().$pepper.$_SERVER['REMOTE_ADDR'].$_SERVER['REMOTE_PORT'].$_SERVER['HTTP_USER_AGENT'].serialize($_POST).serialize($_GET).serialize($_CO OKIE));

//==================================

$entropy=sha1($pepper.$request_entropy);

function crypt_random($min = 0, $max = 0x7FFFFFFF)
{
if ($min == $max) {
return $min;
}

global $entropy;

if (function_exists('openssl_random_pseudo_bytes')) {
// openssl_random_pseudo_bytes() is slow on windows per the following:
// http://stackoverflow.com/questions/1940168/openssl-random-pseudo-bytes-is-slow-php
if ((PHP_OS & "\xDF\xDF\xDF") !== 'WIN') { // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
extract(unpack('Nrandom', pack('H*', sha1(openssl_random_pseudo_bytes(4).$entropy.micro time()))));
return abs($random) % ($max - $min) + $min;
}
}

// see http://en.wikipedia.org/wiki//dev/random
static $urandom = true;
if ($urandom === true) {
// Warning's will be output unles the error suppression operator is used. Errors such as
// "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
$urandom = @fopen('/dev/urandom', 'rb');
}
if (!is_bool($urandom)) {
extract(unpack('Nrandom', pack('H*', sha1(fread($urandom, 4).$entropy.microtime()))));
// say $min = 0 and $max = 3. if we didn't do abs() then we could have stuff like this:
// -4 % 3 + 0 = -1, even though -1 < $min
return abs($random) % ($max - $min) + $min;
}


if(function_exists('mcrypt_create_iv') and version_compare(PHP_VERSION, '5.3.0', '>=')) {
@$tmp16=mcrypt_create_iv(4, MCRYPT_DEV_URANDOM);
if($tmp16!==false) {
extract(unpack('Nrandom', pack('H*', sha1($tmp16.$entropy.microtime()))));
return abs($random) % ($max - $min) + $min;
}
}


/* Prior to PHP 4.2.0, mt_srand() had to be called before mt_rand() could be called.
Prior to PHP 5.2.6, mt_rand()'s automatic seeding was subpar, as elaborated here:

http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/

The seeding routine is pretty much ripped from PHP's own internal GENERATE_SEED() macro:

http://svn.php.net/viewvc/php/php-src/tags/php_5_3_2/ext/standard/php_rand.h?view=markup */
static $seeded;
if (!isset($seeded) and version_compare(PHP_VERSION, '5.2.5', '<=')) {
$seeded = true;
mt_srand(fmod(time() * getmypid(), 0x7FFFFFFF) ^ fmod(1000000 * lcg_value(), 0x7FFFFFFF));
}

extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF).$entropy.microtime()))));
return abs($random) % ($max - $min) + $min;

}

//==================================

function random_bytes($length) {

$bytes = '';

for($i = 0; $i < $length; $i++) $bytes.=chr(crypt_random(0, 255));

return $bytes;
}

//==================================

function create_secure_hash($password, $rounds=null) {

global $secure_hash_rounds;

if(is_null($rounds)) $rounds=$secure_hash_rounds;

$salt=random_bytes(16);
//16 bytes = 128 bits -- note that our salt is a binary salt

global $pepper;

$hash=hash('sha256', $pepper.$salt.$password, true);

$tmp17=pow(2, $rounds)-1;
while($tmp17--) {
$hash=hash('sha256', $hash.$password, true);
}

return $rounds.'*'.$salt.$hash;

}

//==================================

function verify_secure_hash($password, $hash) {

$rounds=substr($hash, 0, strpos($hash, '*'));

$salt=substr($hash, strpos($hash, '*')+1, strlen($hash)-strlen($rounds)-32-1);

$hash=substr($hash, strlen($hash)-32);

global $pepper;

$tmp17=$hash;

$hash=hash('sha256', $pepper.$salt.$password, true);

$rounds=pow(2, $rounds)-1;
while($rounds--) {
$hash=hash('sha256', $hash.$password, true);
}

return $tmp17===$hash;

}

//==================================

$password='test';

$password_hash=create_secure_hash($password);

echo 'Secure hash: ', $password_hash, '<br><br>';

if(verify_secure_hash($password, $password_hash)) echo 'Password ok.';
else echo 'Password wrong!';

?>

بنده میتونم بگم این یک روش نسبتا کامل و بحد کافی قوی هست. هم سالت رندوم داره هم سالت ثابت و هم key stretching و هم از توابع ضعیفی مثل md5 و sha1 استفاده نمیکنه (البته کاربردهای sha1 که در کد میبینید از اون کاربردهای خاص و استثناء هست که قبلا بهش اشاره کردم و در خودش الگوریتم هش مستقیما دخالتی نداره و اساس کارش نیست).

اما توابعی حتی از این امن تر هم وجود دارن که چون ممکنه هرجایی ساپورت نشن و از طرف دیگر استفاده از اونها رو درحال حاضر برای سطح و کاربردهای معمولی خودمون ضروری ندیدم، شخصا از اونها استفاده نکردم.
مثلا تابع bcrypt یک تابع مخصوص اینطور کارها و قویتره (البته سالت ثابت نداره که باید خودتون به پسورد قبل از هش کردن اضافه کنید)، یا حتی از اونهم خفن تر یک الگوریتمی طراحی شده بنام scrypt (اینم سالت ثابت نداره و کلا سالت ثابت رو خودتون باید اضافه کنید). ولی اینا هرجایی ساپورت نمیشن و روی پیاده سازیشون هم کار نکردم (فکر نمیکنم پیاده سازی آماده به زبان PHP ازشون پیدا بشه، و تازه اگر هم پیدا بشه بخاطر دلایل فنی (سرعت پایین) که روی امنیت هم تاثیر میذارن، یحتمل مناسب برای استفاده در کاربرد ما نخواهند بود).

توجه کنید که مقدار متغییر pepper رو باید بصورت دستی موقع نصب برنامه/راه اندازی سایت تغییر داد. مقدارش یک رشتهء رندوم 22 کاراکتری متشکل از اعداد و حروف انگلیسی بزرگ و کوچک باید باشه. اگر این متغییر رو تغییر بدید امنیت بالاتر میره. ولی باید توجه داشت که هش پسوردهای داخل دیتابیس به این متغییر وابسته هستند و اگر از دیتابیس بکاپ گرفته و ریستور بشه مقدار این متغییر هم باید همون مقداری باشه که هشهای موجود در دیتابیس باهاش محاسبه شدن، وگرنه کاربران نمیتونن لاگین کنن چون هشها مطابقت نخواهند کرد.

ضمنا درمورد تابع crypt_random باید بگم این یک تابع تولید اعداد رندوم امن هست (جایگزین امنی برای تابع mt_rand)، چون خود PHP یک تابع تولید اعداد رندوم که برای استفاده در کاربردهای رمزنگاری و امنیتی مناسب باشه نداره.
تازه سیستم تولید اعداد رندوم امن بنده یک بخش اضافهء ذخیرهء آنتروپی درخواستها رو هم داره که چون کد خودش رو داره و جدول و عملیات دیتابیس هم داره دیگه قاطی این کدها نکردم چون فکر میکنم خیلی ضروری نیست و همین کد برای کاربرد هش کردن پسورد و امنیت در سطح برنامه های موجود کفایت میکنه.

نکتهء دیگر اینکه خروجی تابع هش ما از نوع باینری است و بنابراین فیلدی در دیتابیس که برای ذخیرهء اون بکار میره باید از نوع binary یا var binary باشه، مگر اینکه هش رو قبل از درج در دیتابیس، توسط Base64 به ASCII تبدیل کنید (و اونوقت بعد از خوندنش از دیتابیس هم باید عکس همین عملیات رو انجام بدید تا بتونید هش رو Verify کنید).

نکتهء آخر هم اینکه امنیت نهایی هش به قوی بودن خود پسورد کاربر هم بستگی داره (در بدترین حالت، یعنی وقتی کرکر به تمام لایه های دیگر امنیت نفوذ کرده باشه، قدرت خود پسورد هم مهمه که پسورد واقعا ضعیفی نبوده باشه).

lady64
شنبه 26 فروردین 1391, 14:55 عصر
من کرکر md5 را در اینترنت دیده ام ، اما تا به حال sha1 را نه،

این جمله یعنی چی؟:متعجب::خجالت:

MostafaEs3
شنبه 26 فروردین 1391, 14:58 عصر
:لبخند: کرکر (Cracker)

armsoftpc
شنبه 26 فروردین 1391, 15:51 عصر
به نام خدا
با سلام

بنده از این روش در پروژهء خودم استفاده کردم:
دوست عزیز خیلی از شما ممنونم ، اما منظور من اینکودر پسورد نبود ، اینکودر فایل های php بود که دیگه دیکد نشند، چون تا به حال من هر اینکودری که دیدم ، دیکدرش هم هست.
فرض کنید که من می خوام کدی رو به شرکتی بفروشم و بخوام کد بعد از مثلا یک سال دیگر کار نکند ، حالا اگه اپن سورس باشه ، افراد اون شرکت می یایند کد مزاحمی که باعث از کار افتادن سایت میشه ، در زمان مخصوصش رو حذف می کنند، اما اگر تمامی کدها اینکد شد باشند ، عمرا بتواند جایی که کد ها را بعد از زمان معین از کار می اندازد (خیلی ساده است ، به php میگی که بعد از رسیدن به فلان تاریخ exit بده ، با این کار سایت فلج میشه!) پیدا کنند.
حالا آیا شما برای این کار روشی را به سراغ دارید.
فکر کنم خیلی واضح بود.
موفق باشید.

eshpilen
شنبه 26 فروردین 1391, 16:01 عصر
فتوشاپ و اوتوکد و ویندوز رو که که با زبانهایی که به زبان ماشین کامپایل میشن و توسط بزرگترین شرکتها نوشته میشن کرک میکنن، بعد میخواید PHP کرک نشه؟

armsoftpc
شنبه 26 فروردین 1391, 16:02 عصر
این جمله یعنی چی؟:متعجب::خجالت:
توی phpclasses.org کدش را گذاشته.

mosi2007
شنبه 26 فروردین 1391, 16:32 عصر
اگه ممکنه یه نرم افزار برای کد کردن بگید من zend 5 رو دانلود کردم و اصلا نتونستم باهاش هیج صفحه ای رو کد گذاری کنم کار باهاش خیلی سخته دوستان یه نرم افزار ساده تر ی رو معرفی کنن

alonemm
شنبه 26 فروردین 1391, 17:05 عصر
سلام
دوستان واسه اینکه کد های PHP مون رو کسی نبینه چه کاری باید بکنیم
مثلا یه Page که به دیتابیس وصل میشه اگه یه یوزر یا بهتر بگم هکر ببینه که فاتحه سایت خوندست

بهتره از پرتکل HTTPS برای این صفحات استفاده کنید تا از امنیت بالاتری برخوردار بشید.
(برای تهیه با تیم فنی هاست مربوطه تماس بگیرید).

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 01:01 صبح
ببینید استفاده از دیکودر و انکودر فقط زمان کارتون و اجرای اسکریپتتون رو افزایش میده. یه extension ساده بنویسید و کدهاتون رو در اختیار اون برای اجرا قرار بدید تا با گذاشتن چند کاراکتر خاص مانع از رویت کدها بشه.

mosi2007
دوشنبه 11 اردیبهشت 1391, 02:36 صبح
ببینید استفاده از دیکودر و انکودر فقط زمان کارتون و اجرای اسکریپتتون رو افزایش میده. یه extension ساده بنویسید و کدهاتون رو در اختیار اون برای اجرا قرار بدید تا با گذاشتن چند کاراکتر خاص مانع از رویت کدها بشه.

میشه از این روشی که گقتید یه مثال کوچیک بزنید تا با این روش اشنا بشیم
ممنون میشم

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 02:59 صبح
به زودی یه مقاله کامل راجع به این موضوع می نویسم با سورس کد و مثال امیدوارم مشکل دوستان رو حل کنه

mosi2007
دوشنبه 11 اردیبهشت 1391, 03:29 صبح
به زودی یه مقاله کامل راجع به این موضوع می نویسم با سورس کد و مثال امیدوارم مشکل دوستان رو حل کنه
بعد چطوری ما خبردار بشیم ؟؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 03:36 صبح
خوب همینجا میزارم دیگه :لبخند: