نوشته شده توسط : طراحی سایت

 

اگر چه PHP یک زبان وب سایت همه کاره میباشد که اجازه ساخت و ساز سریع محتوای پویا وب سایت مانند سبدهای خرید و RSS را می دهد ولی وب سایت شما را هم می تواند در معرض خطر بگذارند خصوصا انهایی که از یک هاست  مشترک برای هاستینگ وب سایت خود استفاده می کنند و استفاده از هاست اشتراکی خطرات زیادی برای امنیت PHP دارد. هکرها می دانند که چگونه می توانند از نقاط ضعف PHP مثل برگردانند داده های مشتریان و غیره بهره برداری کنند. بنابراین خود را آماده کنید برای فهمیدن خطرات امنیتی PHP و بروز رسانی کد های خود برای جلوگیری و به حداقل رساندن نفوذ هکرهای به وب سایت خود.
SQL Injection
یکی از شایع ترین خطرات امنیتی مربوط به PHP تزریق SQL و یا ( SQL Injection ) نامیده می شود. Sql injection یک تکنیک  که یک هکر با تزریق کدهای مخرب sql در کوئری تعبیه شده در وب سایت می تواند به وب سایت شما آسیب برساند. به عنوان مثال ممکن است هکر SQL را در صفحه فورم شما درج کند در نتیجه همه معلوماتی که ممکن است یک کاربر در این فورم برای ارسال به شما درج کند با ارزش زمینه آن از طریق کیوری SQL به هکر ارسال خواهد شد.
 
به عنوان مثال فرض کنید وب سایت شما از کاربر آدرس ایمیل او را طلب کند تا شما بتوانید معلومات او را داشته و در صورت نیاز با او تماس بگیرید. با این حال کاربر بر فرض مثال یک هکر باشد و می خواهد همه اطلاعات مربوط به کاربران شما را بدست بیاورد بنابراین به جای تایپ کردن ایمیل خودش در فیلد فورم ‘y’ = ‘y’ را تایپ کند.
در اصل کیوری شما این گونه است
Select Email
From User-Table
Where Email.Address = EmailField_Value
می شود
Select Email
From User-Table
Where Email.Address = ‘y’ = ‘y’
کلاس ‘y’ = ‘y’ همیشه مقدار true را دارد. با این کار هکر به تمام آدرس ایمیل های کاربران شما دسترسی پیدا می کند.
حفظ و محافظت خود از تکنیک SQL Injection ساده میباشد. تنها با فراخوانی یک تابع که وظیفه آن چک کردن داده ها قبل از ارسال از طریق کیوری میباشد. برای اطلاعات بیشتر می توانید به Open Web Application Security Project مراجعه کنید.
2 ) XSS Cross Site Scripting
معمولا به عنوان XSS Cross Site Scripting اشاره می شود. هنگامی که یک هکر logic خود را در HTML logic وب سایت شما درج می کند.
 
مثال بالا را در نظر بگیرید.هکر برای ارسال پیام در وب سایت ثبت نام می کند و سپس پست پیام خود را با Javascript routine فرمت می کند که باعث جریان پی در پی popups می شود تا بر روی صفحه نمایش کاربران یک فروم ظاهر شود. با این کار کاربران مجبور هستند یا بر popups کلیک کنند یا مرورگر خود را ببندند.
به طور معمول XSS از طریق لینک های مخرب اجرا می شود. حتی بدتر از آن cross-site scripting معمولا طبیعی به نظر می رسد و آن هم به این دلیل که به عنوان بخشی از قابلیت وب سایت به حساب می آید. نتیجه نهایی آن این است که شما کاربران بلقوه خود را از دست خواهید داد به این دلیل که آنها وب سایت شما را به عنوان یک تهدید خواهند دید.
مانند SQL Injection شما باید تمام کدهای کاربران خود را چک کنید و اطمینان حاصل کنید که هیچ کدام یک از آنها از کد های مخرب استفاده نکنند. برای کسب اطلاعات بیشتر می توانید در Microsoft چک و بررسی کنید.
3 ) Register_Globals
تنظیمات پیکربندی PHP به عنوان Register_Globals شناخته می شود که به طور خودکار تمام متغیرات برنامه را در یک محیط جهانی جایگزینی می کند تا آن را برای توسعه دهندگان وب آسان و سرعت آن را در بازیابی برای کاربران دنیا بیشتر کنید.
مشکل این کار این است که سایت شما را ممکن است در معرض تهدیدات امنیتی جدی قرار دهد . به عنوان مثال یک هکر بالقوه می تواند با یک پارامتر $_GET یک کالا را به صورت رایگان با استفاده از سبد خرید فروشکاه وب سایت شما سفارش و خرید کند.
PHP معمولا با این تنظیمات خاموش می شود و برای اطمینان از آن فایل محلی PHP.ini ( local PHP.INI ) را چک کنید.
منبع:


:: برچسب‌ها: طراحی سایت , برنامه نویسی پرتال , برنامه نویسی سایت , هاست خارجی , هاست , هاستینگ , فروش هاست , فروش هاستینگ , خرید هاستینگ , خرید هاست , هاستینگ خارجی , تبلیغ اینترنتی , خرید اینترنتی , فروشگاه , فروشگاه اینترنتی , سرور ,
:: بازدید از این مطلب : 414
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : پنج شنبه 30 مرداد 1393 | نظرات ()
نوشته شده توسط : طراحی سایت
برنامه نویسی درگاه پرداخت آنلاین بانک ملت در PHP
 

برنامه نویسی درگاه با توجه به نیاز به استفاده از توابع Soap در PHP کاری بسیار چالش برانگیز بوده، زیرا این تابع در نسخه های مختلف PHP رفتار متفاوتی را از خود نشان می دهد. شرکت پرداخت بانک ملت کد نمونه ای را جهت اتصال به سرور پرداخت آنلاین که با استفاده از کتابخانه NuSOAP ارائه نموده که در سرورهایی با نسخه PHP 5.3 به بالا به مشکل بر می خورد. در بخش زیر نحوه برنامه نویسی درگاه پرداخت آنلاین توسط تابع SoapClient که از توابع داخلی PHP بوده را برای شما بیان می نمایم. قبل از هر چیز دقت نمایید این تابع در تنظیمات PHP فعال شده باشد . در صورت عدم فعال سازی با سرور خود تماس حاصل فرمایید.

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

* دقت نمایید جهت پرداخت آنلاین از طریق بانک ملت می بایست قبل از ارسال کاربر به صفحه پرداخت درخواست خود را از طریق SOAP به سرور ارسال نموده و تایید درخواست خود را بگیرید. برای انجام این کار از کد SoapClient استفاده می نماییم:

try { 
$client = @new SoapClient('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
} catch (Exception $e) { 
die($e->getMessage()); 
}

پس از اتصال به سرور پرداخت آنلاین و عدم بروز خطا می بایست درخواست خود را به سرور ارسال نمایید. برای انجام این کار از کد زیر استفاده می نمایید:

// دریافت اطلاعات از کاربر

$namespace='http://interfaces.core.sw.bps.com/';
$terminalId = $_POST['TerminalId'];
$userName = $_POST['UserName'];
$userPassword = $_POST['UserPassword'];
$orderId = filter_var($_POST['PayOrderId'], FILTER_SANITIZE_NUMBER_INT);
$amount = $_POST['PayAmount'];
//$date = date("YYMMDD");
//$time = date("HHIISS");
$localDate = $_POST['PayDate'];
$localTime = $_POST['PayTime'];
$additionalData = $_POST['PayAdditionalData'];
$callBackUrl = $_POST['PayCallBackUrl'];
$payerId = $_POST['PayPayerId'];

// قرار دادن پارامترها در یک آرای
$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $orderId,
'amount' => $amount,
'localDate' => $localDate,
'localTime' => $localTime,
'additionalData' => $additionalData,
'callBackUrl' => $callBackUrl,
'payerId' => $payerId);


// ارسال درخواست پرداخت به سرور بانک
$result = $client->bpPayRequest($parameters, $namespace);

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

$res = @explode (',',$resultStr);
if(is_array($res)){

echo "<script>alert('Pay Response is : " . $resultStr . "');</script>";
echo "Pay Response is : " . $resultStr;

$ResCode = $res[0];

if ($ResCode == "0") {
// Update table, Save RefId
echo "<script language='javascript' type='text/javascript'>postRefId('" . $res[1] . "');</script>";

else {
// log error in app
// Update table, log the error
// Show proper message to user
}
}

در کد بالا ResCode بخش اول خروجی تابع bpPayRequest می باشد که در صورتی که این عدد 0 باشد به آن معناست که پرداخت قابل انجام می باشد و می بایست کاربر را به سمت سرور انتقال دهید. برای انتقال کاربر به سرور از کد جاوا اسکریپت زیر استفاده نمایید که این کد می بایست در HTML صفحه پرداخت قرار داده شود:

 

<script language="javascript" type="text/javascript"> 
function postRefId (refIdValue) {
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", "https://bpm.shaparak.ir/pgwchannel/startpay.mellat"); 
form.setAttribute("target", "_self");
var hiddenField = document.createElement("input"); 
hiddenField.setAttribute("name", "RefId");
hiddenField.setAttribute("value", refIdValue);
form.appendChild(hiddenField);

document.body.appendChild(form); 
form.submit();
document.body.removeChild(form);
}
</script>

تابع جاوا اسکریپت بالا کاربر را به صفحه پرداخت بانک ملت هدایت می نماید. پس از اینکه کاربر در صفحه پرداخت بانک ملت عملیات پرداخت را انجام نمود دوباره به سایت شما بازگشت داده خواهد شد. کاربر به صفحه ای بازگشت داده خواهد شد که شما در متغیر callBackUrl در مرحله قبل به سرور اعلام نموده اید. درگاه پرداخت بانک ملت 4 پارامتر را به صورت POST به آدرس callBackUrl وب سایت شما ارسال می نماید که این چهار متغیر شامل موارد زیر می باشند.

 

$RefId = $_POST['RefId'];
$ResCode = $_POST['ResCode'];
$saleOrderId = $_POST['SaleOrderId'];
$SaleReferenceId = $_POST['SaleReferenceId'];

در صورتی که مقدار متغیر ResCode عددی جز 0 باشد به این معناست که خطایی در پرداخت رخ داده و می توانید کار را ادامه ندهید. در صورتی که مقدار ResCode برابر با 0 باشد می بایست پرداخت را تایید نمایید.

 

if($ResCode==0){

try { 
$client = @new SoapClient('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
} catch (Exception $e) { 
die($e->getMessage()); 


$namespace='http://interfaces.core.sw.bps.com/';

$terminalId = terminalid;
$userName = "username";
$userPassword = "password";


$parameters = array(
'terminalId' => $terminalId,
'userName' => $userName,
'userPassword' => $userPassword,
'orderId' => $saleOrderId,
'saleOrderId' => $saleOrderId,
'saleReferenceId' => $SaleReferenceId);
$result = $client->bpVerifyRequest($parameters, $namespace);

$resultStr = $result->return;
$res = @explode (',',$resultStr);
if(is_array($res)){

echo "<script>alert('Pay Response is : " . $resultStr . "');</script>";
//echo "Pay Response is : " . $resultStr;

$ResCode = $res[0];

if ($ResCode == "0") {
// Update table, Save RefId
$resultsettle = $client->bpSettleRequest($parameters, $namespace);
$resultStrsettle = $resultsettle->return;
$ressettle = @explode (',',$resultStrsettle);
$ResCodesettle = $ressettle[0];
if ($ResCodesettle == "0") {
$paymentdone="done";
}

else {
// log error in app
// Update table, log the error
// Show proper message to user
}
}

در کد بالا تابع bpVerifyRequest عملیات تایید پرداخت را انجام می دهد و در صورتی که خروجی آن نیز 0 باشد می توانید وجه را از حساب کاربر با دستور bpSettleRequest به حساب خود منتقل نمایید. متغیر paymentdone زمانی برابر با done قرار داده می شود که پرداخت به درستی انجام شده باشد و واریز وجه به حساب شما انجام شده باشد. دقت نمایید ممکن است عملیات واریز وجه به حساب شما چندین ساعت طول بکشد. در بخش پایین همچنین آموزشی شرکت به پرداخت ملت را برای شما ضمیمه کردم تا بتوانید توضیحات بیشتر را مطالعه نمایید. در صورت وجود مشکل و یا سوال لطفا موارد را در بخش نظرات اعلام نمایید.

لینک:

برنامه نویسی درگاه پرداخت آنلاین بانک ملت



:: برچسب‌ها: پرداخت آنلاین , پرداخت آنلاین بانک ملت ,
:: بازدید از این مطلب : 720
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : یک شنبه 26 مرداد 1393 | نظرات ()
نوشته شده توسط : طراحی سایت


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

آدرس:

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



:: برچسب‌ها: آگهی , درج آگهی , آگهی رایگان , تبلیغ رایگان , تبلیغ ,
:: بازدید از این مطلب : 412
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : سه شنبه 21 مرداد 1393 | نظرات ()
نوشته شده توسط : طراحی سایت

در برنامه نویسی PHP مواقعی پیش می آید که نیاز دارید دو تاریخ را به یکدیگر مقایسه نمایید و فاصله زمانی بین دو تاریخ را پیدا کنید که در بخش زیر نحوه بدست آوردن آن را به صورت کامل برای شما شرح خواهم داد. تاریخ ها را نمی توانید به صورت عادی از هم منها نمایید و می بایست آنها را به مقدار عددی تبدیل نمایید. برای انجام این کار می توانید از تابع strtotime استفاده نمایید. این تابع تاریخ شما به صورت تاریخ UNIX تبدیل می نماید که این تاریخ فاصله زمان تاریخ شما به ثانیه از زمان یکم 1970 می باشد. در زیر نحوه انجام این کار را به شما نمایش می دهم:

$date1 = "2007-03-24 00:00:00";
$date2 = "2009-06-26 00:00:00";

$diff = abs(strtotime($date2) - strtotime($date1));

$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

printf("%d years, %d months, %d days\n", $years, $months, $days);

در کد بالا تاریخ می توانید به صورت تاریخ و زمان نیز باشد. متغییر $diff دو تاریخ را به صورت عددی از یکدیگر منها می نماید و بنابراین $date2 می بایست زمان جدیدتر باشد. برای بدست آوردن تفاوت سالیانه دو تاریخ می بایست فاصله زمانی بدست آماده را به سال تبدیل نمایید و از تابع floor برای روند کردن آن استفاده نمایید. برای بدست آوردن تعداد ماه ابتدا می بایست تعداد سال ها به ثانیه را از تفاوت دو تاریخ به ثانیه کسر نموده و سپس آن را به ماه تبدیل نمایید و برای سایر واحدهای تاریخ نیز به همین ترتیب عمل نمایید. در صورتی که قصد دارید فاصله بین دو تاریخ را به ساعت و دقیقه و همچنین ثانیه بیان نمایید می توانید کدهای زیر را به کد اصلی خود اضافه نمایید.

$hour = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*24));

$min = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hour*60*60)/ (60));

البته می توانید فاصله زمانی بین دو تاریخ را فقط توسط المان های دیگر نظیر ساعت و دقیقه بیان نمایید که در زیر مثال آن را برای شما آورده ام:

$hour = floor($diff / (60*24));
$min = floor(($diff - $hour * 60*24) / (24));

آدرس:

تفاوت بین دو تاریخ توسط PHP



:: برچسب‌ها: strtotime , php ,
:: بازدید از این مطلب : 510
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : یک شنبه 5 مرداد 1393 | نظرات ()