• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نظرخواهی در خصوص امنیت کد Login
#1
سلام...به نظرتون این کد امنیت حداقلی برای لاگین کردن رو داره؟
کد پی‌اچ‌پی:
//اینجا کد چک کردن کپچاست
function check_captcha($x,$y)
{
$enc $x.date('ymd');      
    if (isset(
$_SERVER['HTTP_USER_AGENT']))
        
$enc .= $_SERVER['HTTP_USER_AGENT'];
    if (isset(
$_SERVER['REMOTE_ADDR'])) 
        
$enc .= $_SERVER['REMOTE_ADDR'];  
 
$xfinalmd5(base64_encode($enc));
    return (
$xfinal===$y)?TRUE:FALSE;
}
if(
check_captcha($_POST['captcha'],$_SESSION['captcha'])){
//اگر کپچا درست بود میره واسه چک کردن یوزر نیم و پسورد
if(isset($_POST['login'])){
    require(
'include/db_connect.php'); 
    if(!empty(
$_POST['username']) && !empty($_POST['pass'])){
    
$username=mysql_real_escape_string(strip_tags($_POST['username']));
    
$pass=mysql_real_escape_string(strip_tags(md5($_POST['pass'])));
    
$selectSQL="SELECT * FROM tblusers WHERE (`username`='$username') limit 1";   
        
$result=mysql_query($selectSQL);
        if(
mysql_num_rows($result)==1){
            
$row=mysql_fetch_array($result);
            if(
$pass!=$row['password']){
                
header("location: signin.php?msg=1");
                exit;         
            }elseif(
$pass==$row['password'] and $row['active']==1){
                
$_SESSION['username']=$username;    
                
$_SESSION['name']=$row['name'];    
                
$_SESSION['user_id']=$row['id'];
                
header("Location: members/index.php");     
                exit();
            }elseif(
$pass==$row['password'] and $row['active']==0){
                
//در صورتی که رمز درست باشه اما این پروفایل توسط مدیر تایید نشده باشه باز هم اجازه ی لاگین نمیده
                
header("location: signin.php?msg=2");
                exit;
            }                                
        }else{
                
header("location: signin.php?msg=1");
                exit;           
        }
    }
}
}else{
            
header("location: signin.php?msg=3");
            exit;

بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#2
29بازدید شده از این پست ! کسی نظری نداره که خوبه این روش یا نه؟Huh
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#3
اولین قدم اینه که خوانا، مرتب و یکدست بنویسی تا بشه خوندش (یا حداقل دل به خوندنش داد)
دومین قدم، مقایسه با دیگر کد های مشابه هستش - نه اینکه سریع هر چی به ذهنمون برسه اجراش کنیم و بیاریمش رو کار
سومین قدم، توضیح مختصر راجب سر و ته کد ها هستش

مثلاً این نشست captcha حاوی چیا هستش که با اون md5(base64_encode شدش مقایسه میشه؟
اون signin.php?msg=1 که مستقیماً از address bar هم در درسترسه!
اون db_connect.php، اگر شرط POST login درست باشه و شروط user pass غلط باشه الکی include میشه؟ و اگر شرط login POST درست نباشه در ادامه ازش استفاده نمیشه؟
برای توابع header و exit یک تابع سازماندهی شده بنویس و اون صدا بزن
الگوریتم امنیتی pass رو هم تقویت کن و به یه md5 دره پیت اکتفا نکن
اون strip_tags و mysql_real_escape_string رو هم برای pass نذار و حذف کن --- اولاً نیازی نیست چون md5 میشه، دوماً بعضی ها از اونا در رمزشاون استفاده می کنن
و...

کد منو ببین:
کد پی‌اچ‌پی:
<?php

function Redirect($Location$Replace 1$HRC NULL)
{
    if(!
headers_sent())
    {
        
header('location: ' urldecode($Location), $Replace$HRC);
        exit;
    }

    exit(
'<meta http-equiv="refresh" content="0; url=' urldecode($Location) . '"/>'); # | exit('<script>document.location.href=' . urldecode($Location) . ';</script>');
    
return;
}

function 
check_captcha($x$y)
{
    
$enc $x.date('ymd');

    if (isset(
$_SERVER['HTTP_USER_AGENT']))
        
$enc .= $_SERVER['HTTP_USER_AGENT'];

    if (isset(
$_SERVER['REMOTE_ADDR'])) 
        
$enc .= $_SERVER['REMOTE_ADDR'];

    return (
md5(base64_encode($enc)) === $y) ? TRUE FALSE;
}

if(
check_captcha($_POST['captcha'], $_SESSION['captcha']))
{
    if(isset(
$_POST['login']))
    {
        require 
'include/db_connect.php';
        if(!empty(
$_POST['username']) && !empty($_POST['pass']))
        {
            
$username mysql_real_escape_string(strip_tags($_POST['username']));
            
$pass md5($_POST['pass']);
            
$selectSQL "SELECT * FROM `tblusers` WHERE (`username` = '{$username}') limit 1;";
            
$result mysql_query($selectSQL);
            if(
mysql_num_rows($result) == 1)
            {
                
$row mysql_fetch_array($result);
                if((
$pass == $row['password']) and ($row['active'] == 1))
                {
                    
$_SESSION['username'] = $username;
                    
$_SESSION['name'] = $row['name'];
                    
$_SESSION['user_id'] = $row['id'];
                    
Redirect('members/index.php');
                }
                elseif((
$pass == $row['password']) and ($row['active'] == 0))
                {
                    
Redirect('signin.php?msg=2');
                }
            }
            
Redirect('signin.php?msg=1');
        }
    }
}
else
{
    
Redirect('signin.php?msg=3');

وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط : Reza webnevesht
#4
نقل قول:بازدید شده از این پست ! کسی نظری نداره که خوبه این روش یا نه؟
شدیداً داره داد میزنه
I need MVC
Angel
  پاسخ
تشکر شده توسط : webnevesht
#5
رضا جان خب من MVC‌ بلد نیستم....خیلی هم دوست دارم یاد بگیرم...اما فرصتی نشده برای این کار هنوزBlushUndecided
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#6
MVC در 5 دقیقه :
سه تا پوشه بساز با یه فایل .
models
view
controllers
index.php

توی index.php اینو بنویس .

کد پی‌اچ‌پی:
if( ! empty($_GET['mod']))
    
$controller $_GET['mod'];
else
    
$controller 'home';
    
if( ! empty(
$_GET['action']))
    
$action $_GET['action'];
else
    
$action 'index';
    
require_once 
dirname(__FILE__)."/controllers/{$controller}.php";

$app = new $controller;
$app->$action(); 

حالا برو توی controllers این دو تا رو بنویس
post.php
page.php
حالا post.php رو باز کن
کد پی‌اچ‌پی:
class post{
    
    function 
index()
    {
        echo 
'Hi i am index';
    }
    
    function 
comment()
    {
        if( ! empty(
$_GET['id']))
            echo 
"comment fot {$_GET['id']}";
        else
            echo 
'No id set';
    }

حالا آدرسهای زیر را بنگر
کد:
site.ir/?mod=post
site.ir/?mod=post&action=comment&id=1
حالا دیگه فقط کافیه متد اضافه کنی به کنترلرت و خلاص
واسه مدل هم باید یه توی پوشه مدل بنویسی و هرجا خواستی توی کنترلر اینکلودش کنی و خلاص .
ویو هم همینطور .

پ ن :
این چیزایی که گفتم 1/50 استاندارد برنامه نویسی MVC هست ، که فقط واسه اینکه درگیر بشی همین الان نوشتم .
یه چرخی بزنی خیلی مقالات خوبی هست ، احسان هم یکی نوشته بگرد توی انجمن هست .
  پاسخ
تشکر شده توسط : vejmad pary_daryayi
#7
بابا آموزش نوین MVCBig Grinممنون ...با همین استارت میزنم و بعدش که فهمیدم چه خبره شروع میکنم با اون کار میکنمBlush

خداییش خیلی این فروم تاثیر مثبت داشته برام توی یادگرفتن بهتر php....
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#8
نقل قول:خداییش خیلی این فروم تاثیر مثبت داشته برام توی یادگرفتن بهتر php....
کار از خیلی گذشته واسه من .
هر چی یاد گرفتم از همینجاست واقعاً .

نقل قول:با همین استارت میزنم و بعدش که فهمیدم چه خبره شروع میکنم با اون کار میکنم
قبل از اینکه کنترلر رو اینکلود کنی ، چک کن فایلش موجود باشه .
بعد یه autoload هم بنویس که مجبور نشی هی include کنی .
بابا برو آموزش احسان رو بخون دیگه .Dodgy
  پاسخ
تشکر شده توسط : webnevesht
#9
(۱۳۹۱ شهریور ۱۸, ۰۱:۵۳ ق.ظ)Reza نوشته: قبل از اینکه کنترلر رو اینکلود کنی ، چک کن فایلش موجود باشه .
بعد یه autoload هم بنویس که مجبور نشی هی include کنی .
اقا رضا امکانش هست autoload رو هم در 30 ثانیه بگید ؟Smile
سرچ کردم متوجه نشدم ..
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#10
اینارو بخونی متوجه میشی .
http://php.net/manual/en/language.oop5.autoload.php
http://www.codeforest.net/autoload-your-classes-in-php
http://www.php.net/manual/en/function.sp...gister.php
http://www.php.net/manual/en/function.spl-autoload.php

یه مثال خیلی ساده هم میزنیم واسه دستگرمی استفاده کنید .

کد پی‌اچ‌پی:
class loader{
    
    private function 
_autoload($file NULL)
    {
        if( ! 
$file)
            return 
NULL;
        
        require_once 
$file.'.php';
    }
    
    public function 
model($mod)
    {
        
$this->_autoload("models/$mod");
        
$out = new $mod;
        return 
$out;
    }
    
    public function 
view($view)
    {
        
$this->_autoload("view/$view");
    }

}


#
#    Example
#

$app->load = new loader;

//for model
$main_model $app->load->model('main_model');
$main_model->someAction() ; ...

//for view
$app->load->view('home'); 

البته این چیزی که من نوشتم یه مثاله و صرفاً استاندارد نیست ، فقط واسه اینکه درگیر بشید .
چند دقیقه شد؟Tongue

اینم کتاب احسان .
بخونیدش


فایل‌های پیوست
.pdf   MVC_ehsan.pdf (اندازه 256.55 KB / تعداد دانلود: 61)
  پاسخ
تشکر شده توسط : pary_daryayi


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان