PDA

View Full Version : جلوگیری از دسترسی به فایلهای محرمانه درپوشه private



jalaladdin
دوشنبه 28 شهریور 1390, 08:50 صبح
برای جلوگیری ازدسترسی به فایلهای محرمانه درپوشه private چگونه عمل کنم بعنوان مثال آدرس وب سایت این
www.majid1.net (http://www.majid.com/) باشد تمامی فایلهای ویرایش و حذف و ارسال و.......در این پوشه private میباشد حالا اگر آدرس بدین صورت بنویسم www.majid1.net/private/delete.php (http://www.majid.com/private/delete.php) صفحه حذف مطالب نشان داده میشود برای جلوگیری ازمشاهده این فایلها با دادن همچنین آدرسی چکار باید کرد؟

MMSHFE
دوشنبه 28 شهریور 1390, 09:16 صبح
با سلام، يك راه با استفاده از htaccess. هست و راه ديگه اينكه پوشه private رو داخل پوشه www يا public_html نگذارين و در كنارش ذخيره كنيد. اينطوري كسي بهش دسترسي نداره ولي خودتون توي كد و فايلهاي داخل پوشه www يا public_html ميتونيد ازطريق /private/.. به پوشه مربوطه دسترسي پيدا كنيد. مثلاً اگه توي فايل index.php كه توي پوشه www يا public_html هست، بخواين محتويات فايل delete.php رو نشون بدين، بايد اين دستور رو اضافه كنيد:


require_once '../private/delete.php';

البته توي كنترل پانل هاست هم ميتونيد با گزينه Permissions در قسمت File Manager سطح دسترسي رو محدود كنيد.
موفق باشيد.

jalaladdin
دوشنبه 28 شهریور 1390, 11:34 صبح
لطفا در این موردPermissions بیشتر توضیح دهید امنیت این قسمت به چه صورت میباشد ؟

jalaladdin
دوشنبه 28 شهریور 1390, 11:44 صبح
چگونه پوشه private رو کنار پوشه www يا public_html ذخيره كنم.

MMSHFE
دوشنبه 28 شهریور 1390, 13:07 عصر
لطفا در این موردPermissions بیشتر توضیح دهید امنیت این قسمت به چه صورت میباشد ؟
توي File Manager روي پوشه مربوطه كليك كرده و بعد گزينه Permissions رو انتخاب ميكنيد و بعد از اون، سطح دسترسي مناسب رو انتخاب ميكنيد. البته يك راه ديگه هم الآن به ذهنم رسيد كه تعجب ميكنم چرا اول نگفتم! ميتونيد با خود PHP هم سطح دسترسي رو تعيين كنيد و براي مثال، اگه كاربر با سطح دسترسي مناسب لاگين نكرده باشه، فايل باز نشه و كاربر رو به صفحه index.php برگردونه.

چگونه پوشه private رو کنار پوشه www يا public_html ذخيره كنم.
توي File Manager پوشه root رو انتخاب كنيد. اگه داخل www يا public_html هستين، يكبار Up one level رو بزنيد تا به پوشه بالاتر منتقل بشين و اونجا پوشه دلخواهتون رو ايجاد كنيد.

jalaladdin
دوشنبه 28 شهریور 1390, 20:57 عصر
بالاتر از public_html یک پوشه بنام private ساختم و تمامی فایلها محرمانه درون آن ریختم حالا برای دسترسی به این پوشه چگونه در مروگر آدرس بنویسم

farhadfery
دوشنبه 28 شهریور 1390, 22:40 عصر
خوب یه ../ بگذار قبل مسیر دیگه!!:کف:
اهان! الان سوال شما را دوباره خوندم. می پرسید تو مرورگر چی بزنم؟
این جواب نظر من. اساتید باید صحت آنرا تایید کنند.
خوب جواب: به سوال اول خودتون برگردید:

ر این پوشه private میباشد حالا اگر آدرس بدین صورت بنویسم www.majid1.net/private/delete.php (http://www.majid.com/private/delete.php) صفحه حذف مطالب نشان داده میشود برای جلوگیری ازمشاهده این فایلها با دادن همچنین آدرسی چکار باید کرد؟
شما تصمیم داشتید تو مرورگر نشه دیگه!

jalaladdin
سه شنبه 29 شهریور 1390, 07:16 صبح
برای صفحه لاگین که فرم ورود به سایت درون آن قرار داره بدین صورت کد نوشتم جواب داد

<?php
if(isset( $user))//اگر کاربری بود
{
// شروع صفحه
?>
<html>
....
</html>
<?php
}// اتمام شرط
else//درغیر این صورت
{
header("Location: index.php"); //برو به فحه اصلی
?>
<!-- // اینم برای اطمینان بیشتر \\ -->
<script language="javascript" >window.location='index.php';</script>
<?php
}// else اتمام
?>
ولی برای بقیه صفحات اگر بصورت بالا کد بنویسم محتوای فایل چه بصورت لاگین وارد سایت بشم و چه از طریق مرورگر آدر س صفحه بنویسم اصلا محتوی فایل نشان داده نمیشود

MMSHFE
سه شنبه 29 شهریور 1390, 08:38 صبح
با سلام، اين كد رو تست كنيد:


<!doctype html>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
session_start();
if(!isset($_SESSION['user'])) {
header('Location: index.php');
die("You have no permission to access this page.\n</body>\n</html>");
}
?>
<!-- Put your page contents here -->
</body>
</html>

نكته: بهتره براي اطمينان از die بعد از header استفاده كنيد تا اگه به هر دليلي header اجرا نشد، بقيه اسكريپت اجرا نشه. اينكه كد JavaScript رو براي اطمينان بيشتر گذاشتين به نظرم اشتباهه چون JS به راحتي قابل غيرفعال شدنه.

بالاتر از public_html یک پوشه بنام private ساختم و تمامی فایلها محرمانه درون آن ریختم حالا برای دسترسی به این پوشه چگونه در مروگر آدرس بنویسمبايد داخل پوشه public_html يك فايل بسازين و اونجا اعتبار كاربر رو چك كنيد و اگه مجاز بود، با استفاده از require_once فايل پوشه private رو ضميمه كنيد.
موفق باشيد.

jalaladdin
سه شنبه 29 شهریور 1390, 13:04 عصر
برای استفاده از HTACCESS چگونه کد بنویسم فکرکنم اینراه از بقیه راهها که دوستان محترم اشاره فرمودند بهتر باشد

farhadfery
سه شنبه 29 شهریور 1390, 14:30 عصر
به نظر من از HTACCESS که استفاده می کنید. از همان حالت پوشه private (یا هر نامی که دوست دارید) در خارج از public_html هم استفاده کنید.

jalaladdin
سه شنبه 29 شهریور 1390, 18:14 عصر
یک فایل بنام log.php درپوشه public_htmlساختم و کدهای زیر درون آن ریختم و فایلهای محرمانه در پوشه privateخارج از پوشه public_htmlقرار دادم اما با این کد وارد پوشه private نمیشود


<?php
require_once( '../pivate/');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" ;Dir:rtl />
<title>Untitled Document</title>
<link href="my.css" rel="stylesheet" type="text/css" />
<link href="cs/default.css" rel="stylesheet" type="text/css" />
<link href="SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
<body>

<tr>


<div class="sidebarbox-border bg-blue02 text">
<div class="sidebarbox-title-shading bg-blue05 dircss ">ورود مدیر</div>


<form action="login.php" method="post" class=" " >


<div align="center" class="dir"> نام کاربری:<input type="text" name="username" value="" size="20" class="textbox" /></div>

<div class="dir">رمز عبور: <input type="password" name="password" value="" size="20" class="textbox" /></div>

<div align="center"> <input type="submit" value="ورود" class="button" /></div>

<a href="forgetpassword.php" ><div class="dir">کلمه عبور را فراموش کرده ام </a></div>

</form>


</tr>
</table>
</body>
</html>

jalaladdin
چهارشنبه 30 شهریور 1390, 07:47 صبح
لطفا راهنمای کنید

MMSHFE
چهارشنبه 30 شهریور 1390, 08:47 صبح
دوست گرامي، كد require رو داخل خود فايلي كه توي پوشه private هست ننويسيد. سه خط اول كدي كه نوشتين يعني تگ PHP رو حذف كنيد و بعد، يك فايل (براي مثال login.php) داخل پوشه public_html بسازين و كدهاي زير رو توي اون بنويسيد:


<?php
// بررسي كنترلهاي امنيتي مثل وجود سشن معتبر براي كاربر و غيره
if(isset($_SESSION['user'])) {
require_once '../private/log.php';
}
else {
header('Location: index.php');
exit();
}
?>

موفق باشيد.

jalaladdin
چهارشنبه 30 شهریور 1390, 14:04 عصر
حالا وقتی درمرورگر این آدرس مینویسم بعنوان مثال www.majid1.com/log.php (http://www.majid1.com/log.php) با توجه به کد زیر که فرم ورود به وب سایت است تمامی فایلهای محرمانه نشان داده میشود

<?php
require_once( '../private/login.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" ;Dir:rtl />
<title>Untitled Document</title>
<link href="my.css" rel="stylesheet" type="text/css" />
<link href="cs/default.css" rel="stylesheet" type="text/css" />
<link href="SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
<body>

<tr>


<div class="sidebarbox-border bg-blue02 text">
<div class="sidebarbox-title-shading bg-blue05 dircss ">ورود مدیر</div>


<form action="login.php " method="post" class=" " >


<div align="center" class="dir"> نام کاربری:<input type="text" name="username" value="" size="20" class="textbox" /></div>

<div class="dir">رمز عبور: <input type="password" name="password" value="" size="20" class="textbox" /></div>

<div align="center"> <input type="submit" value="ورود" class="button" /></div>

<a href="forgetpassword.php" ><div class="dir">کلمه عبور را فراموش کرده ام </a></div>

</form>


</tr>
</table>
</body>
</html>

jalaladdin
پنج شنبه 31 شهریور 1390, 06:34 صبح
<?php
if(isset( $_POST['$user']))//اگر کاربری بود
{
// شروع صفحه
?>
<html>
....
</html>
<?php
}// اتمام شرط
else//درغیر این صورت
{
header("Location: index.php"); //برو به فحه اصلی
?>
<!-- // اینم برای اطمینان بیشتر \\ -->
<script language="javascript" >window.location='index.php';</script>
<?php
}// else اتمام
?>
با توجه به کد بالادرصورتی محتوی فایل لاگین نشان داده میشود که کاربر لاگین کرده باشد یعنی اگر کاربر درمرورگر ادرس بدین صورت بنویسد
محتوای فایل نشان داده نمیشود
www.majid1.com/login.php

jalaladdin
پنج شنبه 31 شهریور 1390, 06:36 صبح
و برای بقیه فایلهای مثل حذف مطلب و ویرایش مطلب و......اگر بدین صورت کد بنویسم اصلا محتوی فایل نشان داده نمیشود چه بصورت لاگین وارد سایت بشم و چه ازطریق آدرس درمرورگر

MMSHFE
پنج شنبه 31 شهریور 1390, 08:05 صبح
با سلام، دوست عزيز از ['POST['user_$ استفاده نكنيد. توي صفحه لاگين وقتي كاربر با موفقيت وارد شد، براش يك Session ايجاد كنيد و توي صفحات ديگه، همون Session رو بررسي كنيد. مثالي كه گذاشتم رو يكبار ديگه با دقت ببينيد.
موفق باشيد.

jalaladdin
پنج شنبه 31 شهریور 1390, 08:45 صبح
این کد لاگین سایت میباشد

<?php
$con = mysql_connect("localhost","root","");
if(!$con)
{
die('could not connect');
}

mysql_select_db("n",$con);
mysql_query("SET NAMES UTF8");
mysql_set_charset("utf8");
$username=mysql_real_escape_string(stripslashes($_ POST['username']));
$password=md5(mysql_real_escape_string(stripslashe s($_POST['password'])));
$result = mysql_query("SELECT COUNT(*) FROM `user1` WHERE `username`='$username' AND `password`='$password';")or die(mysql_error());;


$row = mysql_fetch_row($result);

if($row[0] > 0)
{
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;

echo $_SESSION['username']." welcome";

?><p>

<a href="sendmessage.php" >ارسال مطلب</a></div>
<?php
}
elseif (empty($username)) {

printf('<div class=" bg-text1" >نام کاربری و کلمه عبور را وارد کنید</div>');
printf('<form action="login.php" method="post" class=" " >


<div class="dir"> نام کاربری:<input type="text" name="username" size="20" class="textbox" /></div>

<div class="dir">رمز عبور: <input type="password" name="password" size="20" class="textbox" /></div>

<div align="center"> <input type="submit" value="ورود" class="button" /></div>

</form>');


}
else
{
printf('<div class=" bg-text1" >نام کاربری یا کلمه عبور اشتباه می باشد</div>');
printf('<form action="login.php" method="post" class=" " >


<div class="dir"> نام کاربری:<input type="text" name="username" value="" size="20" class="textbox" /></div>

<div class="dir">رمز عبور: <input type="password" name="password" value="" size="20" class="textbox" /></div>

<div align="center"> <input type="submit" value="ورود" class="button" /></div>

</form>');
}


?>

برای تمامی فایلهای محرمانه در ابتدای کد آنها session_start();اضافه کردم وقتی از طریق لاگین وارد وب سایت میشوم قسمتهای محرمانه وب سایت قابل مشاهده است

jalaladdin
پنج شنبه 31 شهریور 1390, 08:50 صبح
برای بقیه فالها محرمامه بدین صورت کد را اضافه کردم اما محتوی فایل قابل نمایش نیست قسمت else دستور شرطی اجرا میگردد

<?php
if(isset($_SESSION['user']) && $_SESSION['user']=='LoggedIn') //اگر کاربری بود
{
// شروع صفحه
?>
<html>
....
</html>
<?php
}// اتمام شرط
else//درغیر این صورت
{
header("Location: index.php"); //برو به فحه اصلی
?>
<!-- // اینم برای اطمینان بیشتر \\ -->
<script language="javascript" >window.location='index.php';</script>
<?php
}// else اتمام
?>

MMSHFE
پنج شنبه 31 شهریور 1390, 10:05 صبح
:عصبانی++: مرد مؤمن، برادر من، عزيز دلم! دستور

session_start();
رو اول بنويسين، بعد از متغيرهاي Session استفاده كنيد! هم توي فايل لاگين، هم توي بقيه فايلهايي كه به هر شكل با Session سروكار دارن.
موفق باشيد.

jalaladdin
پنج شنبه 31 شهریور 1390, 10:53 صبح
مشکل من اینه وقتی در مرورگر این آدرس مینویسم http://localhost/private/message.php
صفحه ارسال مطلب باز میشه برای جلوگیری از این کار چه کدی باید به کدهای ارسال مطلب اضافه کنم تا وقتی کاربر ادرس در مرورگر نوشت به صفحه ورود به سایت هدایت شود

MMSHFE
پنج شنبه 31 شهریور 1390, 11:10 صبح
پاسخ شماره 10 (http://barnamenevis.org/showthread.php?305656-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D9%81%D8%A7%DB%8C%D9%84%D9%87%D8%A7%DB%8C-%D9%85%D8%AD%D8%B1%D9%85%D8%A7%D9%86%D9%87-%D8%AF%D8%B1%D9%BE%D9%88%D8%B4%D9%87-private&p=1341689&viewfull=1#post1341689) همين بحث رو ببينيد.

jalaladdin
پنج شنبه 31 شهریور 1390, 12:01 عصر
کد شما در پست 10 خطا دارد session_start();باید قبل از کدهای فایل باشد وگرنه مرورگر این پیغام خطا میدهد
Warning: session_start() [function.session-start (http://localhost/my/function.session-start)]: Cannot send session cache limiter - headers already sent (output started at
حالا وقتی وارد وب سایت میشم لینک فایلهای محرمانه نشان داده میشود وقتی روی لینک ارسال مطلب کلیک میکنم با استفاده از کد شما در پست 10 این خطا میدهد
You have no permission to access this page.

jalaladdin
پنج شنبه 31 شهریور 1390, 12:03 عصر
من میخواهم وقتی کاربر آدرس در مروگر تایپ کرد این پیغام خطا بده نه اینکه وارد وب سایت شوم و روی لینک ارسال مطلب کلیک کرد این پیغام خطا بده امیدوارم متوجه منظورم شده باشید از اینکه بطور مرتب سوالم را تکرار میکنم از همه دوستان عذرخواهی میکنم

MMSHFE
پنج شنبه 31 شهریور 1390, 12:07 عصر
با سلام، دو نكته رو دقت كنيد:
1- كدي كه گذاشتم خطا نداره. بايد فايلهاتون رو با كدگذاري UTF-8 without BOM ذخيره كنيد.
2- احتمالاً ! پشت سر isset رو نگذاشتين. توي كد گفتم اگه Session تعريف نشده باشه پيغام خطا بده كه اگه ! رو نگذارين، برعكس ميشه. موفق باشيد.

MMSHFE
شنبه 02 مهر 1390, 17:23 عصر
وای خدا! دوباره که برگشتیم سر نقطه اول! دوست عزیز پوشه private رو خارج از public_html قرار بدین و یکسری فایلها داخل public_html برای دسترسی به اون ایجاد کنید که چک میکنن اگه کاربر مجاز بود، اون فایلها رو include میکنند. موفق باشید.

asonline
شنبه 02 مهر 1390, 18:39 عصر
یه روش دیگه وجود داره و اون هم گذاشتن یوزرنیم و پسورد برای پوشه ی مورد نظر است این کار را می توانید در کنترل پنل سایت خود با عنوان password protect directories برای پوشه ی مورد نظر خود انجام دهید
اگه به دردتون خورد لطفا به سایت من یعنی http://www.yafa.tk/ لینک بدید شما هم می تونی در سایتم در بخش پیوند ها لینک خودت رو بزاری

jalaladdin
شنبه 02 مهر 1390, 20:17 عصر
چه تغییراتی درکد addNews.php تاوقتی کاربر آدرس بدین صورت http://localhost/admin/admin/addNews.php
در مرورگر وارد کرد به صفحه لاگین هدایت شود
فایلها را ضمیمه کردم

jalaladdin
یک شنبه 03 مهر 1390, 17:20 عصر
لطفا راهنمای کنید

jalaladdin
دوشنبه 04 مهر 1390, 21:08 عصر
اگر کسی راهنمای کند ممنون میشم

jalaladdin
شنبه 09 مهر 1390, 11:51 صبح
کسی نیست کمک کنه