مقاله امنیت در php

irp30net

Member
هر کس یه سلیقه ای داره و نظرش برای خودش محترمه...
من اونجوری میخوام کار کنم ، شما هم اینطوری کار کنید...
من اون کدهارو فقط به عنوان مثال گفتم ، وگرنه خودم هم اینقدر توابع هش رو با هم قاطی نمیکنم(چون سرعت پردازش صفحه رو کم میکنه)... شاید منظورم رو درست نرسوندم که همه با اون پستم مخالفت کردن (حتی توی پیام خصوصی!!)
منظور من از اون مثال ، فقط در موارد معدودی ، مثل پروژه هایی که امنیت باید 100% حفظ بشه بود ، مثل یک وبسایت نظامی یا ... تا فقط و فقط یک رشته برای ورود به بخش محافظت شده وجود داشته باشه ، نه بیشتر!
منم به سلیقه شما احترام میگذارم
و در برنامه نویسی اصلا به پای شما ها نمیرسم و تازه 2 ماهه فعالیتم رو شروع کردم!
در ضمن از شما ایراد هم نگرفتم!فکر کنم شما منظور من رو اشتباه متوجه شدید.
من گفتم به نظر شما این راه چطوره؟(راستی مشکلی که نداره؟)
با این همه از حضورتون معذرت می خوام اگه سوء تفاهمی پیش اومده.
امیدوارم همیشه سربلند و موفق باشید
 

my friend

Member
خواهش میکنم ، شما سرور ما هستید...
این راهی هم که گفتید خوبه ، اما به نظر من اگه سرور مشخصی برای سایتتون دارید (و cms شما روی سرور های مختلف نصب نمیشه ، مثل vbulletin یا جوملا و ....) استفاده از تابع hash رو توصیه میکنم ، چون الگوریتم های هش این تابع ممکنه روی بعضی از سرور ها فرق داشته باشه ، مثلا الگوریتم gost ممکنه روی سرور مجید آنلاین فعال باشه ، اما روی سرور گیگاپارس فعال نباشه که باعث دردسر میشه و قابلیت حمل و نقل و تغییر سرور برنامه و میزان استفاده از برنامه رو کم میکنه.......
بهرحال ، بسته به شرایط کاری باید نوع هش رو مشخص کرد...
مثلا میتونید تابع md5 و sha1 رو به صورت زیر به کار ببرید:

PHP:
$str = 'String...';

$hash = md5($str).sha1($str);
یا اگه خواستیم با substr هشی که بدست آوردیم رو جا به جا کنیم...

البته با یه بار استفاده از md5 یا sha1 یک مقدار هش بوجود میاد که امکان شکستنش بسیار بسیار کم هست ، اما 0 نیست و من هم با این مورد حال نمیکنم و سعی میکنم کمتر از این روش استفاده کنم...

یه چیزی رو یادم رفت بگم: همه این کارها برای موقعی هست که سیستم رو برای یک نفر میسازید و قرار نیست که در دسترس همه برای دانلود قرار بگیره ، در غیر این صورت به نظر من بهتره دوبار از md5 یا sha1 استفاده کنید...

بهرحال.... تصمیم با شماست!!
 
آخرین ویرایش:
استفاده از Htaccsess هم میتونه به امنیت کمک کنه ( همه چی رو دوستان گفتن )
فقط یه چیز دیگه میخاستم بگم و چون میترسم قول بدم و وقت نکنم نمیگم هر وقت آماده شد میزام !!
 

k2-4u

Well-Known Member
کار با تابع eval

چند وقت پیش دیده بودم که یکی از دوستان که هکر معروفی هم بود مقاله ای در باره تابع eval داده بود که . بهتره وارد جزیاتش نشم

PHP:
$Value = escapeshellcmd($Value);
eval("echo '$Value'; ");
اگر خواستید مقداری رو که از کاربر میگیرید در تابع eval بگذارید با استفاده از تابع escapeshellcmd امکان پذیر است
 

k2-4u

Well-Known Member
header ها در پروتکل http

سلام
یکی دیگه از کارایی که برای امن تر کردن وب سایت میشه انجام داد تکنیک مخفی کردن php هست. تو این روش ما سعی میکنیم تا یه نفوزگر یا ... نتونه بفهمه ما از زبان php برای نوشتن سایت استفاده کردیم.
3 جور میشه کار کرد:
اولی مخفی کردن php به عنوان زبانی دیگر:
کد:
# Make PHP code look like other code types
AddType application/x-httpd-php .asp .py .pl
همونطور که میبنید ما میتونیم کاری کنیم که از این به بعد فایل ali.php با نامی مثل ali.py نمایش داده شه که طرف فکر کنه اسکریپت مت با پایتون نوشته شده!!!!
[/code]
روش دوم استفاده از پسوند های ناشناخته برای اسکریپت های php هست:
کد:
# Make PHP code look like unknown types
AddType application/x-httpd-php .bop .foo .133t
تو اینجا مثلا فایل ali.php به صورت ali.bop نمایش داده میشه که خوب طرف باید بگرده ببینه .bop چی هست.
اما روش سوم اینه که با توجه به اینکه php بعد از تفسیر کد ، کد های html رو برای مرورگر کاربر میفرسته ما به جای پسوند php پسوند html یا htm رو نشون بدیم:
کد:
# Make all PHP code look like HTML
AddType application/x-httpd-php .htm .html
انجام این کار زیاد سخت نیست فقط کافیه یکی از این کد ها رو به فایل .htaccess اضافه کنید. این روش جلوی حمله یا هک شدن رو نمیگیره ولی خوب همین که طرف یه کم وقت باید بزاره بفهمه نوع کد نویسی با چه زبونی بوده خودش یه مزیت هست. انجام این کار هم 1 بیشتر وقت گرانبهاتون رو نمیگیره! پس حتما ازش استفاده کنید. توی سایت های زیادی انجام این کار توصیه شده.
موفق باشید.

روش بسیار عالی است ولی یک مشکل بزرگ وجود داره اونم اینه که بسیار سریع و راحت می توان تمام مشخصات اصلی رو بدست آورد

همون طور که می دونید مرورگر ها همگی برای ارتباط با سرور ها از پروتکل http استفاده می کنند
و این پروتکل هم تعدادی header داره که اونا رو برای مرورگر میفرسته و مرورگر بسیاری از اطلاعات رو مانند cookie ها از
header ها بدست میاره
مروگر ها آخرین قسمت header ( یعنی کد های html) رو به ما نشون میدن و بقیه رو از جلوی دست بر می داره

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

PHP:
HTTP/1.1 200 OK
Date: Wed, 18 Feb 2009 19:25:20 GMT
Server: Apache
X-Powered-By: PHP/5.2.8
Expires: 0
Cache-Control: private, post-check=0, pre-check=0, max-age=0
Pragma: no-cache
X-UA-Compatible: IE=7
Content-Encoding: gzip
Content-Length: 32023
Connection: close
Content-Type: text/html; charset=UTF-8

و کد های html صفحه که به صورت gzip کدگذاری شده (برای کم شدن حجم )

با استفاده از تابع header امکات عوض کردند بعضی از header ها هست :-?
مثل
PHP:
header("X-Powered-By:Golabi 2.2");
:cool:
ولی مشکل اینجاست که header
Server: Apache رو نمیشه عوض کرد به نظر شما راهی در تنظیمات apachi هست !؟!


برای بدست آوردن header سایت ها کافیست با socket و port 80 به سایت مورد نظر متصل و header درست را ارسال کنید
و در جواب Lisen کل header های دریافتی را مشاهده کنید

بهترین راه هم استفاده از برنامه httpwatch هست (که از دکتر گوگل کمک بگیرید)

(من هکر کلاه سفیدم :-? )

منبع : کاملا خودم WwW.k2-4u.CoM (امنیت و هک )
 

k2-4u

Well-Known Member
دفاع از فایل های php

برای دفاع از فایل های php که روی سایت است . و استفاده مستقیم نمی شوند (برای مثال با دستور include فرا خوانی می شوند) دو راه عالی است . یکی از راه ها رو که دوستمون گفت و اونم اینه که فایل ها رو یک شاخه عقب تر از فولدر www
بگذاریم . و سپس include کنیم
را دیگر استفاده از یک header است که کاری می کنه . طرف فکر کنه چنین فایلی روی سرور نیست
PHP:
header("HTTP/1.1 404 OK");
که باید به این صورت استفاده بشه

در فایل class.php
PHP:
if(!defined ('ClassNameExists'));
header("HTTP/1.1 404 OK");

class ClassName
{
........
}

درفایل load.php
PHP:
<?
define("ClassNameExists", "ture");
include_once('class.php');

$OB=new ClassName();
?>

پس در صورتی که صفحه از درون مرورگر باز بشه error 404 میده که چنین صفحه ای نیست؟
شما می توانین error های دیگه بزارید که بهترینش همینه


منبع : WwW.k2-4u.CoM
 

جدیدترین ارسال ها

بالا