سفارش تبلیغ
صبا ویژن

ترفند کاربردی PHP برای حرفه ای ها

1- از برگه تقلب برای SQL Injection استفاده کنید

هر توسعه دهنده وب باید به خوبی با شیوه های امنیتی آشنا باشد و باید برنامه ها را با این شیوه های امنیتی درون ذهنش طراحی کند. قانون اولیه این است که هرگز به داده های دریافت شده از جای دیگر اعتماد نکنید. قانون دیگر اسکیپ (escape) داده ها قبل از ارسال به جای دیگری است. ترکیب این دو قانون برای ایجاد اصول امنیتی پایه می تواند بدین صورت ساده شوند: فیلتر ورودی، اسکیپ خروجی (FIEO).

علت اصلی حمله تزریق به پایگاه داده، اسکیپ کردن داده های خروجی است. به خصوص وقتی رخ می دهد که وجه تمایز بین قالب پرس و جو SQL و داده های استفاده شده توسط پرس و جو به دقت حفظ نمی شود. این حمله در برنامه های PHP که پرس و جوها با روش زیر ساخته می شوند، رایج است:

<?php

$query = “SELECT *

FROM users

WHERE name = ‘{$_GET[‘name’]}"”;

?>

در این حالت مقدار متغیر

$_GET[‘name’]

توسط کاربر، منبعی دیگر، تعیین می شود که نه فیلتر شده و نه اسکیپ.

اسکیپ شدن داده ها باعث می شود تا قالب اصلی آنها در یک متن جدید حفظ شود. تأکید بر اسکیپ داده های خروجی تذکری است برای اینکه در خارج از برنامه باید داده ها اسکیپ شده استفاده شوند چراکه در غیر این صورت ممکن است به صورت اشتباه تفسیر شوند. در مقابل آن فیلتر کردن داده ها این اطمینان را به ما می دهد که داده ها قبل از استفاده اعتبارسنجی شده اند. تأکید بر فیلتر ورودی بیانگر این است که منبع داده های خارج از برنامه باید فیلتر شود زیرا نمی توان به آنها اعتماد کرد.

با فرض اینکه از MySQL استفاده می کنیم، می توان آسیب پذیری حمله تزریق به SQL را با اسکیپ اسم توسط تابع ()mysql_real_escape_string کاهش داد. حتی اگر اسم فیلتر هم شود یک لایه امنیتی بیشتری به وجود می آید. (اجرای چندین لایه امنیتی ” دفاع در عمق” نامیده می شود و یک روش امنیتی بسیار خوب است.) در مثال زیر برای افرایش شفافیت کد از قراردادهای نامگذاری استفاده شده و در آن فیلتر ورودی و اسکیپ خروجی داده ها نشان داده می شود:

<?php

// Initialize arrays for filtered and escaped data, respectively.

$clean = array();

$sql = array();

// Filter the name. (For simplicity, we require alphabetic names.)

if (ctype_alpha($_GET[‘name’])) {

$clean[‘name’] = $_GET[‘name’];

} else {

// The name is invalid. Do something here.

}

// Escape the name.

$sql[‘name’] = mysql_real_escape_string($clean[‘name’]);

// Construct the query.

$query = “SELECT *

FROM users

WHERE name = ‘{$sql[‘name’]}"”;

?>

گرچه استفاده از قراردادهای نامگذاری حتی با وجود اینکه چیزی فیلتر شده یا نه و یا اسکیپ شده یا نه، می تواند به شما کمک کند اما استفاده از عبارت های آماده، روش بسیار بهتری است. خوشبختانه با استفاده از PDO توسعه دهندگان PHP یک API جهانی برای دسترسی به داده ها دارند که از عبارت های آماده پشتیبانی می کند حتی اگر پایگاه داده اصولی نباشد.

به یاد داشته باشید آسیب پذیری های حمله تزریق به SQL زمانی وجود دارد که تمایز بین قالب یک پرس و جو SQL و داده های استفاده شده توسط آن پرس و جو به دقت حفظ نشود. با استفاده از عبارت های آماده می توانید این مسئولیت را با ایجاد قالب پرس و جو و داده در مراحل جداگانه به سمت بانک اطلاعاتی هل دهید:

<?php

// Provide the query format.

$query = $db->prepare(‘SELECT *

FROM users

WHERE name = :name’);

// Provide the query data and execute the query.

$query->execute(array(‘name’ => $clean[‘name’]));

?>

صفحه http://php.net/pdo اطلاعات و نمونه های بیشتری را ارائه می دهد. عبارت های آماده قوی ترین موارد حفاظتی را برای مقابله با حمله تزریق به SQL پیشنهاد می دهند.

 

ادامه مطلب....


چرا از PHP استفاده می کنیم؟

برای شناخت و دوست داشتن PHP دلایل زیادی وجود دارد، احتمالاً قوی ترین و معتبرترین آنها این است: هر جایی که وب استفاده شود، PHP نیز استفاده و اجرا می شود. اگر بخواهید با احتیاط خرید کنید، 3 دلار ناچیز در هر ماه برای هزینه اکانت هاست به شما امکان می دهد تا بخواهید برنامه وب خود را در Python یا Ruby اجرا کنید. اما قطعاً PHP را اجرا خواهید کرد. این بدان معناست هر جا که باشید می توانید روی آن حساب کنید.

نرم افزارهای محبوب بسیاری با PHP نوشته شده اند، چون در همه جا اجرا می شود و شروع کار با آن نیز آسان است. وردپرس بزرگترین و آشناترین نمونه است اما ابزاری مانند جوملا، دروپال، مجنتو،ExpressionEngine ، ویبولتین، مدیاویکی و … نیز PHP را روی سرورهایشان اجرا می کنند.

چارچوب های PHP زیادی نیز وجود دارد: Symfony، Zend، Laravel، Aura، CakePHP، Yii و حتی CodeIgnitor قدیمی. مطمئناً برای هر زبان دیگری هم می توانید لیستی از چارچوب های وب تهیه کنید و حتی در مورد زبانهای رایج وب مانند Python ، Ruby یا Node / JavaScript ممکن است بتوانید لیست قابل رقابتی از نظر تعداد جمع آوری کنید. اما تعداد سایت هایی که PHP را اجرا می کنند، بسیار زیاد است.

وردپرس با افتخار فخرفروشی می کند که بیش از 30 درصد از اینترنت را پشتیبانی می کند. به احتمال زیاد حجم بسیار زیادی از برنامه های اینترنتی در حال استفاده از PHP هستند.

PHP از خصوصیات بسیار خوبی برخوردار است

پویایی آسان در PHP ساخته می شود

PHP بیشتر از هر زبان دیگری رندر و برنامه نویسی HTML را آسان تر می کند. بنابراین تبدیل کد HTML به PHP بسیار ساده است. فقط کافیست فایل file.html خود را به file.php تغییر دهید و در برخی تگ های <? php ?> کمی پویایی اضافه کنید. همچنین برای رسیدگی به بقیه کارهایتان، بیشتر سرورهای وب از قبل پیکربندی شده اند. این زبان آنقدر ساده است که تقریباً هر کسی می تواند آن را شروع کند، بدون اینکه نیاز به درک زیادی از برنامه نویسی داشته باشد. PHP برای کسب تجربه بسیار مناسب است و به همین دلیل کدهای بد زیادی نوشته می شود.

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

 

ادامه مطلب...


50 ترفند بسیار کاربردی نرم افزار تری دی مکس

قبل از شروع کار…

01- از افزونه ها استفاده کنید : افزونه های معروف زیادی برای نرم افزار 3dsmax مانند Forest Pack ،Rail Clone ، Fumefx، Thinking Particles، PheonixFD و… وجود دارند.

02- ویژگی layer را فراموش نکنید: این ویژگی مدیریت صحنه 3dsmax را بسیار ساده تر می کند. افزونه ها و اسکریپت های (به معنی یک نرم‌افزار تحت وب یا یک سایت اینترنتی است که می‌تواند روی هاست نصب و فعال‌سازی شود و برای کاربری خاص مورد استفاده قرار گیرد) زیادی برای افزودن ویژگی های مختلف به مدیر لایه 3dsmax وجود دارد، البته خود layer به تنهایی یک ابزار قدرتمند در صحنه های وسیع و بزرگ است.

03- در یک انجمن فعال 3dsmax شرکت کنید: یادگیری از مردم یکی از سریعترین راههاست. در همه انجمن های بزرگ مانند CG Talk ، CG Architect ، 3DTotal و…. ثبت نام کنید، آنها همیشه در حال به اشتراک گذاری دانش خود هستند.

04- از قابلیت شخصی سازی 3dsmax به نفع خود استفاده کنید: من بخش های مخصوص خودم را دارم: کلید های میانبر اصلاح شده در Modifiers Stack که بیشترین استفاده را دارند،shader library شخصی، رندرهای از پیش تنظیم شده، تنظیم جریان PF و موارد دیگر. بار ها دیده ام که بعضی افراد آنقدر نرم افزار 3ds max را شخصی سازی می کنند که در نهایت شبیه به یک نرم افزار جدید به نظر می رسد.

05- صحنه خود را بهینه کنید: در منظره خود از سایه ها استفاده کنید. یکی از بهترین کارهایی که برای واقع گرایی تصویر می توانید انجام دهید خاموش کردن شفافیت است، اما اگر می خواهید دوباره آن را فعال کنید از کلید های Alt + X استفاده کنید.

06- ایجاد یک پرونده Maxstart.max: یک پرونده Maxstart.max همانند پرونده ای است که همیشه هنگام باز کردن 3dsmax به طور پیش فرض بارگیری می شود. تنظیمات رندر و رندر رایج خود، نورپردازی، دوربین و غیره را تنظیم کنید. این تنظیمات در زمان کار در صحنه جدید، باعث صرفه جویی در زمان تنظیم مجدد همه چیز می شود چرا که از قبل بیشتر تنظیمات را انجام داده اید.

07- تعداد کمی از صحنه های پایه را بسازید: همانطور که کارهای هنری خود را کامل می کنید، خواهید فهمید که برخی تنظیمات رندر، دوربین و چراغ به خوبی برای فضای داخلی، خارجی، عکس های گرفته شده یا انیمیشن کار می کنند. هر زمان که این کار را انجام دادید یک کپی خالی از آن صحنه را ذخیره کنید (دوربین و چراغها را ذخیره کنید- نه ساختار و وسایل). می توانید از این صحنه های خالی برای سرعت بخشیدن به شروع پروژه بعدی خود استفاده کنید.

08- مدیریت و سازماندهی ساختار های بزرگ: پراکسی ها برای ذخیره ساختار های بزرگی که در بسیاری از صحنه ها استفاده می شوند (برای مثال درختان بلند و انبوه) بسیار مناسب هستند. یکی از محدودیت های موجود این است که فرمت شبکه v-ray اشیا را ذخیره نمی کند. برای حل این مشکل، هر پروکسی که با اشیا خود در صحنه های 3dsmax ایجاد کرده اید را ذخیره کنید و آن صحنه ها را در پوشه های جداگانه نگه دارید. اگر می خواهید آن را اصلاح کنید، می توانید منابع شبکه را در همان پرونده نگه دارید. هنگام کار بر روی یک صحنه جدید، فقط کافی است پوشه را باز کرده و پروکسی های خود را ادغام کنید.

 

ادامه مطلب....


4 مشکل رایج در تری دی مکس

1- مشکل – صحنه ای را با وضوح بالا (در 3ds max) رندرگیری کرده اید اما به دلایلی نمی توانید آن را ذخیره کنید و پیام “memory error” را دریافت می کنید.

راه حل – آن را به عنوان فرمت .tif ذخیره کنید. به نظر می رسد تنها راه حلی که در این شرایط کار می کند همین باشد.

2- مشکل– شما در حال تلاش برای رندر گرفتن از صحنه ای با تنظیمات camera correction (3ds max و vray) هستید اما نتیجه کارتان غیر واقعی تر از چیزی است که انتظار داشتید.

راه حل – در قسمت vray > system تیک گزینه “max compatible shade context” را بردارید.

3- مشکل– (در 3ds max) نمی توانید یک رندر با وضوح بالا داشته باشید. چرا که خطای “Error creating bitmap” را دریافت کرده اید.

راه حل– صحنه را ذخیره کنید و از 3ds max آن خارج شوید. مجدداً 3ds max را باز کنید و یک رندر خالی با وضوح مورد نظرتان بگیرید. پس از آن صحنه اولیه را باز کرده و دوباره رندرگیری کنید. نمی دانم چرا ولی راه حل این مشکل فقط همین است!

4- مشکل – شما سعی می کنید فضای داخلی ساختمان را (با 3ds max و vray) رندرگیری کنید، اما به دلایلی پنجره ها سیاه هستند، اگرچه نور از درون آنها عبور می کند.

راه حل – احتمالاً در پنجره environment از بخش vray، به طور تصادفی تیک گزینه “override reflection/refraction” را زده اید و آن را سیاه کرده اید. تیک را بردارید تا مشکلتان حل شود.

ادامه مطلب....


ترفند کاربردی PHP برای مبتدیان

1- ویژگی گزارش خطا را فعال کنید

قبل از شروع کار بر روی یک پروژه جدید، فعال سازی ویژگی گزارش خطا از اولین کارهایی است که باید انجام دهید. حتی توسعه دهندگان حرفه ای نیز به آن قسم می خورند. این ویژگی باعث می شود که در حین زمان ساخت برنامه و در زمان بروز خطاها به جای صفحه سفید خالی، پیام خطای مفیدی را مشاهده کنید. هنگام اجرای کد به شما کمک می کند تا خطاها را حذف کنید و بازدهی را افزایش می دهد.

با قرار دادن این خط کد در فایل php.ini ویژگی گزارش خطا را فعال کنید:

diplay_errors = on

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

وقتی شروع به نوشتن کدهای پیچیده تر کنید، برای گرفتن خطاهای تجزیه و نحوی نیاز به پیاده سازی توابع پیشرفته تری خواهید داشت.

2- با شیوه های امنیتی آشنا شوید

همه وب سایت ها و برنامه ها باید با استفاده از بهترین شیوه های امنیتی طراحی و توسعه یابند. باید دو قانون را دنبال کنید:

  • به داده های دریافت شده از جای دیگر به غیر از وب سایت یا برنامه خودتان اعتماد نکنید.
  • قبل از تصمیم برای ارسال داده به وب سایت یا برنامه دیگر داده ها را اسکیپ (Escape) کنید.

این دو قانون (FIEO) یعنی فیلتر ورودی و اسکیپ خروجی، بلوک های امنیتی وب را تشکیل می دهند. آنها از وب سایت یا برنامه شما در برابر حمله تزریق به SQL محافظت می کنند. شکست در اسکیپ داده ها می تواند منجر به نقض امنیت شود. راه های محافظتی برای مقابله با این نوع حملات عبارتند از: 1) حذف علامت نقل قول، 2) فرار از علامت نقل قول ، یا 3) استفاده از یک ویژگی توکار برای محافظت در برابر علامت نقل قول.

اما این فقط یک کار سطحی است. اگر می خواهید درک عمیق تری از امنیت وب پیدا کنید، باید بدانید که این کد برای چه چیزی و چگونه کار می کند و کجای برنامه می تواند قرار گیرد:

mysql_real_escape_string ()

3- با دستور سه گانه آشنا شوید

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

در اینجا دستور اصلیif-else آمده است:

//equivalent if-else
if($x==1)
{
if($y++2)
{
$variable = true;
}
else
{
$variable = false;
}
}
else
{
$variable = false;
}

در اینجا از رابطه منطقی عملگر سه گانه ساده استفاده شده است:

//nested ternary operator
$ variable = ($x==1) ? (($==2) ? true : false) : false;

با گسترش زبان خود علاوه بر اینکه می توانید کدهای کوتاه تری بنویسید، می توانید به سرعت پیشرفت کرده و درک بهتری از ظرافت های زبان پیدا کنید. بدین ترتیب می توانید بهینه سازی های کوچک را مانند یک حرفه ای انجام دهید.

 

ادامه مطلب...