# زبان های اسکریپتی > PHP > تاپیک های آموزشی و دنباله دار >  یک کتاب فوق العاده آموزش کل زبان PHP

## Pedram77

سلام. امشب داشتم تو یکی از سایتا ی دانلود کتاب خارجی چرخ میزدم که چشمم خورد به یه تیکه طلا!
یک کتاب آموزش کــــــــــــــــــــــــ  ــــــامل PHP. با نمونه و مثال تو خود کتاب.
کتاب 673 صفحه داره که بیست صفحه اولش فهرستشه، ولی متاسفانه تو منابع فارسی بهترین کتاب کلش بیست صفحس!
خودم کتابو میخونم اون مطالبی که زیاد تو منابع فارسی نیستن رو به زبون خودمون براتون مینویسم (کتاب انگلیسیه)  :چشمک: 
این هم لینک:
لینک دانلود کتاب آموزش PHP

_(اگر لینک کار نکرد ایمیلتونو به طور خصوصی بهم بفرستید براتون ایمیل کنم)_

----------


## freeman99

آره بنظر کتاب خوبی میاد، ولی ظاهرا یک مقدار قدیمیه! (2004)
بعد یه چیزی که میخواستم بگم اینکه حتی در بهترین و معتبرترین منابع و کتابها هم ممکنه نقص و اشکال و اشتباهاتی وجود داشته باشه، بنابراین در مواردی که لازمه و میشه شک کرد بهتره تحقیق بیشتری بشه و چندتا منبع با هم مقایسه بشن!
مثلا یک مورد خاصش مسائل امنیتی هست که بخصوص به کتابهای صرف برنامه نویسی نمیشه در این باب اتکا کرد و باید کلی تحقیق کرد راجع به هر موضوع امنیتی و منابع مختلف رو با هم مقایسه کرد و درست و غلط و بهتر و بدتر رو پیدا کرد و یک جمع بندی از تمام نکات و نیازهای مطرح بدست آورد.
مثلا در همین کتاب من داشتم همینطوری کلی تند تند چشم مینداختم که برآورد کنم محتویاتش در چه حدی از گستردگی و کیفیت و اهمیت است، یهو چشمم خورد به این:
A “good” password generator might look like this:
function random_password($length=8) {
    $str = '';
    for($i=0; $i<$length; $i++) {
        $str .= chr(rand(48,122));
    }
    return $str;
}
از این تابع بعنوان یک تولید کننده پسورد خوب یاد میکنه، ولی باید بگم تاجاییکه بنده تخصص و اطلاع دارم و به ذهنم میرسه این اصلا یک password generator خوب نیست، بلکه بنظر من خیلی هم بده و از نظر امنیت اصلا اصولی نیست. دلیلش اینکه از تابع rand برای این کاربرد که یک کاربرد امنیتی است استفاده کرده، در حالیکه تابع rand یک تابع رندوم امنیتی نیست به هیچ وجه. حداقل اگر از mt_rand استفاده کرده بود یا چیزهای دیگه احتمالا در ترکیب با اینا، آدم دلش یخورده بیشتر خوش بود (ولی حتی اونا هم اصولی نیست و برای چنین کاربردهای امنیتی قابل قبول نیستن از دید تخصصی).

----------


## id1385

دوست عزیز نوشته که : might look like this
یعنی یه چیز تو این مایه ها میتونه باشه، بعدشم ذخیره سازیشو نگفته که!
شما پسودو همینطوری که تو دیتابیس ذخیره نمی کنی که، بالاخره یه بلایی سرش میاری بعد save میکنی، همه چیرم نمیشه آموزش داد
دانش پذیر باید خودش یه کمی ابتکاذ به خرج بده  :چشمک:

----------


## freeman99

> دوست عزیز نوشته که : might look like this
> یعنی یه چیز تو این مایه ها میتونه باشه


خب دقیقا منظورم همینه که توی این مایه ها هم نمیتونه باشه!
پسورد یه مسئلهء امنیتی محوریه و نمیشه چنین چیزی یا شبیه این رو گفت «خوب ... توی این مایه ها». معنا نمیده! وقتی میگی یه چیز خوب میتونه توی این مایه ها باشه، باید یه چیزی باشه که خودش اشتباه و بدآموزی نباشه. این مثال اصلا غلطه از پایه.




> بعدشم ذخیره سازیشو نگفته که!
> شما پسودو همینطوری که تو دیتابیس ذخیره نمی کنی که، بالاخره یه بلایی سرش میاری بعد save میکنی، همه چیرم نمیشه آموزش داد
> دانش پذیر باید خودش یه کمی ابتکاذ به خرج بده


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

ضمنا این موارد چیزهایی نیست که آدم بدون تخصص و دانش و بینش و تحقیقات قبلی کافی درمورد این مسائل بدونه. بخاطر همین چیزهایی که شما برداشت کردید اصلا منظور من نبودن، ولی حالا که توضیح دادم شاید متوجه بشید یا سرنخ گیر بیارید حداقل که بتونید روش تحقیق و تفکر بیشتری بکنید. اینا مسائل ظریف و تخصصی در فیلد امنیت و رمزنگاری هستن. هر هکری هم این چیزا رو نمیدونه و نمیتونه سوء استفاده کنه، ولی هستن کسانی که میدونن و میتونن. من خودم بعد از مدتها و کلی تحقیق و تفکر و سرگیجه تونستم از این چیزها آگاه بشم و بفهمم. کار ساده ای نیست.

----------


## freeman99

البته کتاب خوبیه ها! نمیخوام چیزی از ارزشهای این کتاب کم کنم  :لبخند گشاده!: 
من خودم بخش مربوط به HTTP caching اش رو کامل خوندم. خوب کامل و قشنگ نوشته بود خیلی مفید بود.
بقیش هم مرور میکنم ببینم بخشهای مفیدش برام چیه بخونم.

----------

