نمایش نتایج 1 تا 4 از 4

نام تاپیک: چک امنیت یک لاگین

  1. #1

    چک امنیت یک لاگین

    سلام دوستان من تازه php و طراحی یادگرفتن رو شروع کردم یک صفحه لاگین درست کردم کد رو یه نگاه بندازد اگه راه نفوذ داره خیلی لطف میکنید بگید و یاد بدید
    این ادرس سایته http://saeedizade.zgig.in/bootstrap/index.php من یک سری یوزر داخل سایت تعریف کردم (username = saeedizade password = 1234) کلا همه اطلاعات رو گفتم بهتون قصد ندارم پسوورد حک کنید فقط در مورد راه های نفوذ به همچین سیستم ساده و را ه های بستنش کمک میخام (سایت کلا تمرینیه)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>Bootstrap Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <style>
    .left1{
    float: right;
    }
    </style>
    </head>
    <body>

    <div class="container">
    <div class = left1>
    <h2>ورود به سیستم</h2>
    </div>
    <br><br>
    <form class="form-horizontal" role="form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <div class="form-group">
    <label class="control-label col-sm-2" for="name"><br>username:</label>
    <div class="col-sm-10">
    <input type="name" class="form-control" name= "username" placeholder="username">
    </div>
    </div>
    <div class="form-group">
    <label class="control-label col-sm-2" for="pwd">Password:</label>
    <div class="col-sm-10">
    <input type="password" class="form-control" id="pwd" name= "password" placeholder="Enter password">
    </div>
    </div>
    <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
    <button type="submit" class="btn btn-default">ورود</button>
    </div>
    </div>
    </form>
    <?php
    $username ="";
    $password ="";
    if ($_SERVER["REQUEST_METHOD"] == "POST") {


    $username = $_POST["username"];
    $password = $_POST["password"];
    }
    $servername = "mysql.zgig.in";
    $serverusername = "u890853761_stu";
    $serverpassword = "123456789";
    $databasename = "u890853761_stu";
    $conn = new mysqli($servername, $serverusername, $serverpassword, $databasename);
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }
    echo "Connected successfully" . "<br>";

    $sql = "SELECT stnumber,stname,stusername , stpassword FROM student where stusername='$username' and stpassword = '$password'";

    $result = $conn->query($sql);

    if ($result->num_rows >= 1) {

    while($row = $result->fetch_assoc()) {
    session_start();

    $_SESSION['st'] = $row;

    header("Location: /bootstrap/student.php");
    exit;
    }
    } else {
    echo "ورود نا موفق نام کاربری یا رمز اشتباه";
    }
    ?>
    </div>
    </body>
    </html>


  2. #2
    کاربر دائمی آواتار sedamorde
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ایران
    پست
    240

    نقل قول: چک امنیت یک لاگین

    سلام،
    دوست عزیز کد شما مشکلاتی داره:

    1 - ورودی‌های کاربر (مثل username و password) باید حتماً فیلتر بشه. اگر ار یک فیلتر قوی استفاده نکنید راه را برای خرابکاری هکرها کاملاً باز گذاشته‌اید.
    من چند مورد ذکر می‌کنم که به شما کمک می‌کنه، البته تأکید می‌کنم؛ کدهای من فقط جهت مثال است و به موارد و کار بیشتری نیاز دارد.

    تابع trim :
    این تابع فضای خالیِ قبل و بعد از ورودی را حذف می‌کند، شاید کاربر در انتهای Username خود یک Space زده باشد!

    $username = trim( $_POST['username'] );
    //'username ' => 'username'


    تابع addslashes :
    این تابع کاراکتر ' را به صورت \' در می‌آورد. اگر کاراکتر ' یا " در Query قرار بگیرد می‌تواند خطرات بسیار جدی‌ای ایجاد کند. امنییت این مسئله برای پایگاه داده و Query ها بسیار مهم است.

    $username = addslashes( $_POST['username'] );
    //addslashes("'username") => \'username


    تابع htmlentities :
    این تابع کدهای HTML را غیر فعال می‌کند. مطمئن شوید که کدهای HTML و جاوا اسکریپت (JavaScript)‌ در ورودی‌ها فیلتر شود.

    $username = htmlentities( $_POST['username'] );
    //'<div>username</div>' => &lt;div&gt;username&lt;/div&gt;gt;


    توابع دیگری هم وجود دارد که هر کدام را بهر کاری ساختند، مثل :‌ htmlspecialchars , strip_tags و ...


    2 - لازم نیست result را در یک حلقه قرار بدهید.
    حلقه‌ها، مثل while‌ برای زمانی است که نتیجه‌ی متغیرهای ما دربرگیرنده‌ی بیش از یک مقدار باشد. در اینجا شما فقط داده‌های یک کاربر را از پایگاه داده می‌گیرید نه بیشتر، پس حلقه لازم نیست.


    3 - در PHP تمام Header ها باید قبل از نمایش خروجی چاپ شود، قبل از نمایش کدهای HTML‌. در غیر این صورت با خطا مواجه می‌شوید. این قانون در مورد session_start هم صدق می‌کند.


    4 - اولاً بهتر است کدهای PHP را در یک فایل جداگانه از HTML بنویسید. اگر اینکار را نمی‌کنید حداقل کدهای PHP را در ابتدای صفحه بنویسید.


    5 - فراموش نکنید Password ها را حتماً به صورت Hash (یا همان رمز شده) در پایگاه داده ذخیره کنید.
    در همین تاپیک امنییت، موارد بسیار خوبی مثال زده شده است.

    6 - لازم و شاید عاقلانه هم نباشد که بررسی Password کاربر در داخل Query انجام شود.
    ابتدا اطلاعات کاربر را مطابق با username از پایگاه داده بگیرید، اگر کاربر وجود داشت سپس رمز آن را بررسی کنید.

    7 - برای کار با پایگا‌ه‌های داده SQL از PHP PDO استفاده کنید بهتر است. آموزش‌های زیادی در این‌باره وجود دارد.


    امیدوارم راهنمایی‌های اندک من به شما کمک کند.
    موفق باشید.

  3. #3
    کاربر دائمی آواتار Vidico
    تاریخ عضویت
    خرداد 1394
    محل زندگی
    شاید در قلب...!
    پست
    222

    نقل قول: چک امنیت یک لاگین

    نقل قول نوشته شده توسط sedamorde مشاهده تاپیک
    سلام،
    دوست عزیز کد شما مشکلاتی داره:

    1 - ورودی‌های کاربر (مثل username و password) باید حتماً فیلتر بشه. اگر ار یک فیلتر قوی استفاده نکنید راه را برای خرابکاری هکرها کاملاً باز گذاشته‌اید.
    من چند مورد ذکر می‌کنم که به شما کمک می‌کنه، البته تأکید می‌کنم؛ کدهای من فقط جهت مثال است و به موارد و کار بیشتری نیاز دارد.

    تابع trim :
    این تابع فضای خالیِ قبل و بعد از ورودی را حذف می‌کند، شاید کاربر در انتهای Username خود یک Space زده باشد!

    $username = trim( $_POST['username'] );
    //'username ' => 'username'


    تابع addslashes :
    این تابع کاراکتر ' را به صورت \' در می‌آورد. اگر کاراکتر ' یا " در Query قرار بگیرد می‌تواند خطرات بسیار جدی‌ای ایجاد کند. امنییت این مسئله برای پایگاه داده و Query ها بسیار مهم است.

    $username = addslashes( $_POST['username'] );
    //addslashes("'username") => \'username


    تابع htmlentities :
    این تابع کدهای HTML را غیر فعال می‌کند. مطمئن شوید که کدهای HTML و جاوا اسکریپت (JavaScript)‌ در ورودی‌ها فیلتر شود.

    $username = htmlentities( $_POST['username'] );
    //'<div>username</div>' => &lt;div&gt;username&lt;/div&gt;gt;


    توابع دیگری هم وجود دارد که هر کدام را بهر کاری ساختند، مثل :‌ htmlspecialchars , strip_tags و ...


    2 - لازم نیست result را در یک حلقه قرار بدهید.
    حلقه‌ها، مثل while‌ برای زمانی است که نتیجه‌ی متغیرهای ما دربرگیرنده‌ی بیش از یک مقدار باشد. در اینجا شما فقط داده‌های یک کاربر را از پایگاه داده می‌گیرید نه بیشتر، پس حلقه لازم نیست.


    3 - در PHP تمام Header ها باید قبل از نمایش خروجی چاپ شود، قبل از نمایش کدهای HTML‌. در غیر این صورت با خطا مواجه می‌شوید. این قانون در مورد session_start هم صدق می‌کند.


    4 - اولاً بهتر است کدهای PHP را در یک فایل جداگانه از HTML بنویسید. اگر اینکار را نمی‌کنید حداقل کدهای PHP را در ابتدای صفحه بنویسید.


    5 - فراموش نکنید Password ها را حتماً به صورت Hash (یا همان رمز شده) در پایگاه داده ذخیره کنید.
    در همین تاپیک امنییت، موارد بسیار خوبی مثال زده شده است.

    6 - لازم و شاید عاقلانه هم نباشد که بررسی Password کاربر در داخل Query انجام شود.
    ابتدا اطلاعات کاربر را مطابق با username از پایگاه داده بگیرید، اگر کاربر وجود داشت سپس رمز آن را بررسی کنید.

    7 - برای کار با پایگا‌ه‌های داده SQL از PHP PDO استفاده کنید بهتر است. آموزش‌های زیادی در این‌باره وجود دارد.


    امیدوارم راهنمایی‌های اندک من به شما کمک کند.
    موفق باشید.
    بسیار جامع بود، مفید واقع شد...

    میشه خودتون یک صفحه فوق امن برای لاگین بنویسید؟ ارائه بدین همه راحت بشن

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: چک امنیت یک لاگین

    سلام دوست عزیز!
    در کنار گفته های دوستمون این رو بگم که صفحه ی شما باگ SQL Injection داره و عملا می شه برای نفوذ این کارو کرد:
    برای نام کاربری admin رو زد و برای گذرواژه این عبارت رو:
    ' OR '1'='1

تاپیک های مشابه

  1. چک کردن امنیت یک سایت
    نوشته شده توسط mohammad-gh در بخش PHP
    پاسخ: 7
    آخرین پست: چهارشنبه 12 آبان 1389, 00:23 صبح
  2. چک کردن یک کارکتر در کلمه؟
    نوشته شده توسط majid325 در بخش Access
    پاسخ: 1
    آخرین پست: چهارشنبه 23 خرداد 1386, 13:17 عصر
  3. چک کردن یک textbox برای وارد کردن شماره (تلفن)
    نوشته شده توسط tc1000 در بخش ASP.NET Web Forms
    پاسخ: 14
    آخرین پست: جمعه 07 اردیبهشت 1386, 10:42 صبح
  4. چک کردن یک گزینه در Regedit ( وجود دارد یا نه )
    نوشته شده توسط راحله سعادتی در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: شنبه 27 اسفند 1384, 17:43 عصر
  5. انتخاب یک گزینه از عنصر Select با چک کردن یک شرط
    نوشته شده توسط م-شمس در بخش طراحی وب (Web Design)
    پاسخ: 0
    آخرین پست: دوشنبه 18 آبان 1383, 12:32 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •