یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی
تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

۴۳ مطلب با کلمه‌ی کلیدی «tips & tricks» ثبت شده است

۰ نظر ۰۱/۱۲/۱۵
یوشا آل ایوب

- کانفیگ hardening شده هسته Linux برای محیط production x64:

(قبل از کامپایل هسته Linux بهمین شکل پارامترهارو داخل فایل .config موجود در سورس لینوکس تون اعمال کنید)

۱ نظر ۰۱/۰۶/۰۱
یوشا آل ایوب

۱- اینکه Exception ها، استثنا هستن! فقط باید از اونها برای مواجه با مشکلات غیر قابل پیش بینی استفاده کنید.

۲- هرگز از Exception برای کنترل جریان/flow نرم افزار استفاده نکنید. اینکار باعث میشه که نتونید مسیر اجرای کد رو دنبال کنید و پرفورمنس نرم افزار هم کاهش پیدا میکنه. (مثل دستور GoTo که در برخی زبانها وجود داره)

۳- هرگز شی Exception رو بعنوان مقدار و خروجی return نکنید.

۴- Exception فقط باید حاوی اطلاعات رخداد/رویداد باشد و نباید حاوی پارامترها(یا اطلاعات اضافی) باشه که روی نحوه انجام و منطق داخل بلوک catch تاثیر بذاره.

۵- هرگز Exception های زیرساختی/داخلی مثل SystemException, OutOfMemoryException, StackOverflowException, ComException, ExecutionEngineException, NullReferenceException, IndexOutOfRangeException رو پرتاب نکنید.

۶-  برای حالت debug نرم افزار Exception پرتاب نکنید.

۷- داخل متد toString() کلاس هاتون Exception پرتاب نکنید. اینکار عمل debugging رو سخت می کنه. (از این متد برای debug کردن استفاده میشه)

۸- داخل توابع مقایسه ای(true/false) و equal هرگز Exception پرتاب نکنید.

۹- هرگز StackOverflowException و OutOfMemoryException رو catch نکنید. اینها غیرقابل کنترل و هندل شدن هستن.

۱۰- همیشه Exception های سطح پایین و general رو به Exception های ریز تر و خاص تر wrap کنید. مثل:

NotFoundException -> FileNotFoundException/URLNotFoundException

۱۱- همیشه عملیات پاکسازی/Cleanup رو در بلوک finally قراربدید و نه در بلوک catch. بلوک finally همیشه اجرا میشه اما بلوک catch فقط هنگام رخداد Exception اجرا میشه.

۱۲- فقط باید زمانی Exception رو catch کنید که میتونید بخوبی مشکل رو handle و recovery کنید. درغیراینصورت بهتره Exception رو catch نکنید. (چون درواقع صرفا مخفیش کردید)

۱۳- بهتره که هنگام timeout شدن یک عملیات، TimeoutException پرتاب کنید نه اینکه توسط if/else اونرو handle کنید.

۱۴- در بلوک finally هرگز Exception پرتاب نکنید.

۱۵- صرفا Log و rethrow کردن یک Exception در بلوک catch بمعنای handle کردنش نیست.

۱۶- هرگز Exception مادر/عمومی مثل Exception رو throw نکنید.

۱۷- برای wrap کردن Exception همیشه از کلاس مادر Exception یا RuntimeException ارث بری کنید.

18- بهتره در بلوک catch از if/else استفاده نکنید تا از ایجاد branch های تودرتو جلوگیری بشه.

19- همیشه پیامهای Exception رو در فایلی log کنید.

20- بجای throw ex از throw استفاده کنید تا پیامهای stacktrace قبلی و کنونی موجود در ex حفظ بشن.

catch(Exception ex)
{
   throw;
}

 

۰ نظر ۰۱/۰۳/۱۸
یوشا آل ایوب

1- حتی الامکان دایرکتیوهای using رو بداخل namespace منتقل کنید و در خارج از محدوده namespace رها نکنید.

StyleCop: SA1200: UsingDirectivesMustBePlacedWithinNamespace

namespace ConsoleApp1
{
   using System;
   using System.Collections.Generic;
   using System.Text;

   class Program
   {
      private static void Main(string[] args)
      {
      }
   }
}

نکته: درصورتیکه فقط یک namespace در فایل موردنظر موجود باشه.

 

2- همیشه reference های بلااستفاده رو از پروژه حذف کنید.

نکته: البته هنگام کامپایل برنامه، همه reference های استفاده نشده حذف میشن، ولی خب همیشه محیط کدنویسی رو تمیز و خلوت نگه دارید.

 

3- همیشه دایرکتیوهای using بلااستفاده(خاکستری رنگ) رو از کلاسها حذف کنید.

   using System.Drawing;
   using System.Resources; // <-----
   using System.Reflection; // <-----
   using System.Runtime.InteropServices; // <-----
   using System;
   using System.Windows.Forms;

 

4- جهت بازگشت چندین مقدار از یک متد میتونید از کلمه کلیدی ref یا out یا پرانتز (type1, type2, typeN) یا حتی Tuple استفاده کنید:

public Tuple <int, string, string> GetStudent()
{
   int studentId = 11;
   string firstName = "Alex";
   string lastName = "Koertson";
   return Tuple.Create(studentId, firstName, lastName);
}

نکته: Tuple از نوع reference type هستش و حداکثر ظرفیت 8 عنصر رو داره. همچنین از دات نت نسخه 4 و جدیدتر در دسترسه.

 

5- قابلیت های مخفی در #C!

۰ نظر ۹۹/۱۲/۱۵
یوشا آل ایوب

 

1- برای بدست اوردن میزان حافظه مصرف شده باید از دستور memory_get_usage(FALSE) استفاده کنید و برای میزان حافظه رزرو شده باید از دستور memory_get_usage(TRUE) استفاده کنید.

اما این نکته در مستندات سایت PHP.net برعکس توضیح داده شده:

int memory_get_usage ([ bool $real_usage = FALSE ] )

Returns the amount of memory, in bytes, that's currently being allocated to your PHP script.

 

2- زمانی از دستور strcmp استفاده کنید که قراره مقدار رشته ها شمارش(کمتر/بیشتر) بشن، درغیراینصورت استفاده از اپراتور === برای برابر بودن/نبودن رشته ها بهترین گزینست.


3- آیا میدونید به 4 روش مختلف میتونید تصاویر رو در مرورگر نمایش/output بدید؟

header('Content-Type: image/jpg');
$image = imagecreatefromjpeg('yourfilename.jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
imagejpeg($image);
imagedestroy($image);

و

header('Content-Type: image/jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
readfile('yourfilename.jpg');

و

header('Content-Type: image/jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
echo file_get_contents('yourfilename.jpg');

و

header('Content-Type: image/jpg');
header('Content-Length: ' . filesize('yourfilename.jpg'));
header('X-Sendfile: ' . 'yourfilename.jpg'); 
exit;

 

4- اگر از PHP CLI در محیط text UI سیستم عامل استفاده می کنید و مشکلات output و نمایشی دارید، بهتره از دستور passthru استفاده کنید.

 

5- نکته جزیی: فراموش نکنید که تابع json_decode فقط اعضای public شی موردنظر رو تبدیل میکنه، و نه private / protected.

۰ نظر ۹۹/۱۰/۱۳
یوشا آل ایوب

بدون استفاده از عبارت SET NAMES utf8 در دیتابیس:
enlightened اگر انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 باشه، charset دیتابیس هم utf8_persian_ci باشه خروجیش صحیحه و میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 "نباشه"، charset دیتابیس utf8_persian_ci باشه/نباشه خروجیش میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر انکودینگ فایل موردنظر UTF8 "نباشه"، تگ meta صفحه UTF8 باشه، charset دیتابیس utf8_persian_ci باشه/نباشه خروجیش میشه این:
� � � � � � � � � � � � � � 

اگر انکودینگ فایل موردنظر UTF8 "نباشه"، تگ meta صفحه UTF8 "نباشه"، charset دیتابیس utf8_persian_ci باشه/نباشه خروجیش میشه این:
Â È Ê Ë Ì Í Î Ï Ö Ñ Ò Ô

enlightened اگر انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 باشه، اما charset دیتابیس utf8_persian_ci "نباشه" خروجیش صحیحه و میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

می بینید که حتی بدون استفاده از عبارت SET NAMES utf8 باز هم میشه "خروجی" صحیح رو گرفت.

با استفاده از عبارت SET NAMES utf8 در دیتابیس:
enlightened اگر SET NAMES UTF8 باشه، انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 باشه، charset دیتابیس utf8_persian_ci باشه خروجیش صحیحه و میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر SET NAMES UTF8 باشه، انکودینگ فایل موردنظر UTF8 باشه، تگ meta صفحه UTF8 "نباشه"، charset دیتابیس utf8_persian_ci باشه خروجیش میشه این:
آ ب پ ت ث ج چ ح خ د ض ر ز ش

اگر SET NAMES UTF8 باشه، charset دیتابیس utf8_persian_ci "نباشه"، و همه چیز دیگر UTF8 باشن خروجیش میشه این:
? ? ? ? ? ? ? ? ? ? ? ? ? ?

اگر SET NAMES UTF8 باشه، انکودینگ فایل موردنظر UTF8 "نباشه"، تگ meta صفحه UTF8 باشه، charset دیتابیس utf8_persian_ci باشه خروجیش میشه این:
" "

enlightened اما برای نمایش درست کلمات در خود دیتابیس لازمه که از set_charset و SET NAMES UTF8 استفاده کنید.

۰ نظر ۹۹/۰۶/۲۱
یوشا آل ایوب

مقالات مرتبط:

نکاتی برای افزایش امنیت وبسایت

 

1- حتاالمکان از کتابخانه های template engine برای کدنویسی لایه View/UI وب اپلیکیشن استفاده کنید و نه کدنویسی inline/mixed.

 

2- برای کاهش مصرف پهنای باند و افزایش سرعت سایت، همیشه فایلهای CSS, JavaScript, HTML رو minify و lint کنید:

CSS:

https://github.com/purifycss/purifycss

https://cssnano.co/guides/getting-started

https://github.com/ben-eb/cssnano-cli

https://github.com/css/csso-cli

https://github.com/uncss/uncss

JS:

https://github.com/nolanlawson/optimize-js

 

3- بطور منظم و ماهیانه پهنای باند وبسایت/سرور رو چک کنید.

 

4- یک سیستم اسکنر پیاده کنید که نوع دسترسی و زمان تغییر فایلها و دایرکتوری های کل سایت رو اسکن و به شما گزارش کنه.

 

5- از استفاده بیش از حد کوکی و ذخیره اطلاعات حساس/نمایشی  در داخلشون خودداری کنید.

۰ نظر ۹۹/۰۴/۲۵
یوشا آل ایوب

مقالات مرتبط:

نکات و اصول مهم در طراحی وبسایت

نکاتی برای افزایش امنیت وبسایت

#2 - نکاتی برای افزایش امنیت وبسایت

 

 

1- از صفت alt در تگهای img و از صفت title در تگهای link استفاده کنید. صفت alt بیانگر خلاصه ای از محتوای تصویر موردنظر هستش.


2- فراموش نکنید که محل کنونی آدرسهای Font در فایلهای CSS از همان مسیر Relative فایل CSS شروع می شوند.


3- Link های صفحات را چک کنید و از سالم بودنشان مطمئن بشید.


4- شکل ظاهری صفحات جداگانه را با شکل ظاهری صفحات اصلی یکنواخت کنید.


5- به عملا و دیکطه لقاط دغط کنید!

۱ نظر ۹۹/۰۳/۲۵
یوشا آل ایوب

مقالات مرتبط:

#2 - نکاتی برای افزایش امنیت وبسایت

 

 

1- مکانیزم و شیوه کار پروتوکل HTTP رو کامل فرا بگیرید.

 

2- همیشه کتابخانه ها و فریم ورکهای استفاده شده در وب اپلیکیشن رو بروز نگه دارید.

 

3- جهت جلوگیری از click-jacking مقدار هدر X-Frame-Options رو DENY قرار بدید:

Apache httpd.conf:

Header always append X-Frame-Options DENY


Apache .htaccess:

Header append X-FRAME-OPTIONS "DENY"


Nginx:

add_header X-Frame-Options "DENY";


PHP:

header('X-Frame-Options: DENY');

 

4- بصورت هفتگی یا ماهیانه کل سایت رو توسط نرم افزارها و سایتهای اسکنر امنیتی چک کنید:

https://observatory.mozilla.org

https://securityheaders.com

https://urlvoid.com

https://virustotal.com
https://immuniweb.com/websec
https://detectify.com
http://amn.bayan.ir
https://ssllabs.com/ssltest/index.html

http://isithacked.com
https://app.upguard.com/webscan
https://app.webinspector.com/online_scan
https://suip.biz/?act=sqlmap
https://pentest-tools.com/home
https://sitecheck.sucuri.net
https://quttera.com
https://siteguarding.com

https://transparencyreport.google.com/safe-browsing/search

 

5- داده های ورودی توسط کاربر را بدقت بررسی، برش و فیلترسازی کنید!

 

6- برای اپلیکیشن، قابلیت debug mode درست کنید تا در مواقع لزوم بتونید فعالیت های اپلیکیشن رو مانیتور و خطازدایی کنید.

۱ نظر ۹۸/۰۷/۱۸
یوشا آل ایوب

programming mistakes

۱ نظر موافقین ۱ مخالفین ۰ ۹۸/۰۶/۰۱
یوشا آل ایوب