הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   איך מאבטחים דבר שכזה, איך?? (https://hosts.co.il/forums/showthread.php?t=87721)

dor77 30-01-11 16:40

איך מאבטחים דבר שכזה, איך??
 
חבר'ה אני ממש מיואש..זה נראה לא הגיוני.
כאשר משתמש מעלה תמונה כלשהי, אז לתוך התיקייה images בשרת נוצרת תיקייה בשם של היוזר שלו ושם מתאחסנת התמונה, לדוגמא, אם משתמש בשם dor העלה תמונה בשם computer.png אז זהו יהיה הנתיב שלה:

http://www.example.com/images/dor/computer.png

בדף שבו אני מציג את התמונות של כל משתמש בהתאם ליוזר שלו, אני עושה לולאה שקוראת מהתיקייה של כל משתמש בהתאם ליוזר..ככה

images/$user/

עד כאן הכל טוב, הבעיה מתחילה כאשר השם משתמש הוא שם משתמש נכון והכל בסדר ואז אני מציג למשתמש את התמונות שלו, ואז הוא יכול לראות בקוד מקור שמקור התמונות הן:

http://www.example.com/images/dor/pic1.png
http://www.example.com/images/dor/pic2.png
http://www.example.com/images/dor/pic3.png
http://www.example.com/images/dor/pic4.png

ואז אם הוא יהיה אצל חבר שלו, שלא מחובר לאתר, הוא יקיש בשורת הכתובת http://www.example.com/images/dor/pic1.png
ויקבל את התמונה.
אני רוצה למנוע מצב כזה, אני רוצה שרק כאשר המשתמש מחובר, ורק כאשר הוא מנסה לגשת לתמונות ששמורות על שם היוזר שלו (שבעוגייה) התמונה תופיע לו.

מקווה שהבנתם..לי בכל אופן זה נראה די בלתי אפשרי..חשבתי על כל דרך אפשרית..

תודה!

ZeroDay 30-01-11 16:55

אם הבנתי אותך נכון ,
צור תמונה בעלת שם רנדומלי (אותיות+מספרים) תשתמש בHTACCESS שהכתובת תראה כך
images/dor/pic1.png
ובעצם בעמוד יהיה תנאי שאם המשתמש מחובר אז זה יציג את התמונה ואם לא אז זה לא יציג .

IgalSt 30-01-11 17:03

הפתרון הנכון במקרה הזה הוא לשמור את התמונות בנתיב שלא נגיש דרך האינטרנט ולהגיש את התמונה למשתמש בצורה בינארית רק אחרי שווידאת שהמשתמש התחבר למערכת וזיהית אותו.

Erez | TrustMedia.co.il 30-01-11 17:17

בעזרת htaccess תחסום גישה לתיקיית התמונות, ואת התצוגה של התמונות תבצע עם סקריפט PHP בעזרת GD שיבדוק אם זה המשתמש הנכון ואז יציג את התמונה למשתמש

dor77 30-01-11 17:21

איך אני מציג את זה בבינארית?
ובעניין ה HTACCESS..יש פירוט? מעולם לא התעסקתי ב HTACCESS.

תודה רבה!

עריכה: לא מודבר רק בתמונות..זה יכול להיות גם קובץ doc או mp3..
תודה.

Erez | TrustMedia.co.il 30-01-11 18:05

אז כמו קודם, רק תשלח headים בקובץ שיפנו לקובץ שאתה רוצה להציג, תקרא קצת על הנושא

dor77 30-01-11 18:08

קראתי טיפה על HTACCESS..אבל לא רואה איך זה יעזור לי..זה רק משנה את הכתובת..

Erez | TrustMedia.co.il 30-01-11 18:31

אתה יכול להגדיר שם הרשאות גישה לקבצים, שיוכלו לגשת לקבצים בתיקייה מסויימת רק מהשרת עצמו ולא מאיי פי חיצוני
htaccess משמש לממש הרבה דברים, ושינוי כתובת זה רק שימוש אחד שלו

dor77 30-01-11 18:35

ציטוט:

נכתב במקור על ידי WiPi (פרסם 794545)
אתה יכול להגדיר שם הרשאות גישה לקבצים, שיוכלו לגשת לקבצים בתיקייה מסויימת רק מהשרת עצמו ולא מאיי פי חיצוני
htaccess משמש לממש הרבה דברים, ושינוי כתובת זה רק שימוש אחד שלו

רק מהשרת עצמו זאת אומרת אם יקישו את הנתיב המלא של התמונה לא יצליחו לגשת אלייה?
ואיך אני עושה שבכל זאת יגשו אלייה, מי שמורשה כמובן?

תודה רבה על העזרה, מעריך זאת מאוד..

Erez | TrustMedia.co.il 30-01-11 19:28

אתה חוסם גישה מבחוץ כמו שאמרתי, ואז יוצר סקריפט PHP שהוא מקבל בפרמטרים שלו את הפרטים על הקובץ שאתה רוצה, ואז בודק אם יש לבנאדם הרשאה מתאימה לגשת לקובץ, אם לא- תציג שגיאה או משהו, אם כן- תשלח headerים שתואמים לקובץ שהוא אמור לראות ותטען את התוכן של הקובץ ותדפיס אותו (file_get_contents וecho אמור לעבוד לפי דעתי)

dor77 30-01-11 19:44

תראה, נגיד ובן אדם נכנס לכתובת הזו: http://www.eample.com/images/dor/pic.png
מה אני יכול לעשות?
הדפדפן ישר יאפשר לו הורדה.
לחסום גישה מבחוץ, איך אני חוסם? אני יכול לחסום גישה לתיקייה, אבל לנתיב שלם?

ZeroDay 30-01-11 19:56

כמו שאמרתי אתה יכול לעשות עם HTACCESS שזה יראה כמו תיקיה ותיצור קובץ בPHP שיהיה בתוכו תנאי שאם הוא יהיה לו גישה התמונה תופיע

dor77 30-01-11 20:05

ציטוט:

נכתב במקור על ידי ZeroDay (פרסם 794567)
כמו שאמרתי אתה יכול לעשות עם HTACCESS שזה יראה כמו תיקיה ותיצור קובץ בPHP שיהיה בתוכו תנאי שאם הוא יהיה לו גישה התמונה תופיע

תראה, ניסו לעזור לי איכשהו..
זה מה ששמתי בhtacces:
PHP קוד:

RewriteEngine On
RewriteRule 
^images/(.+)/(.+) getfile.php?user=$1&file=$

וזה הקובץ getfile.php:

PHP קוד:


<?php
// Validate request
if( !isset($_GET['user'], $_GET['file']) ) die('404 File Not Found');

// Check whether the username is profer
if( !preg_match("#[a-z0-9]#i"$_GET['user'])) die("Invalid user name");
if( 
strpos($_GET['file'], '..'))       die("That can not be the filename");

// Create file path
$filename './images/'.$_GET['user'].'/'.$_GET['file'];

// Validate file existance
if (!is_file($filename)) die('404 File Not Found');

// Checking authorization
if( "user_authorized" )
{
    
// Check file's type
    
$finfo finfo_open(FILEINFO_MIME_TYPE);
    
$mime  finfo_file($finfo$filename);
    
finfo_close($finfo);

    
// Send file to the user
    
header("Content-Type: ".$mime);
    
readfile($filename);

}
else
{
    die(
"Please authorize");
}
?>

אני נכנס לכאן:
http://www.eample.com/images/dor/pic.png
ואכן רואה את התמונה..אבל איפה בקובץ php אני יכול להכניס בדיקה מתאימה?
בקיצור, אני לא רואה שקורה משהו..מה אני לא עושה בסדר?
זה פשוט מתסכל..
אין פיתרון אחר מלבד htacces?
גם לא מצאתי מקום שמלמד על זה בצורה מקיפה..בעברית בכלל אין.

שלא תבינו לא נכון, אני מאוד מאוד מאוד מעריך ומודה לכם, אני פשוט מתוסכל.
תודה.

BlueNosE 30-01-11 23:13

מה הבעיה? כבר הגעת לשלב האחרון. שים התחברות למסד ושליפה ממנו של IP מורשה, או בדיקת סשן, או כל מה שתרצה..
אפילו במצב קיצוני: תשתמש בchallenge-response בשביל להציג את התמונות בעמוד, שלח דרך GET את הresponse ותגביל אותו לתקופת זמן של דקה. ככה הכל יעבוד פרפקט ומי שירצה לקשר מבחוץ לא יוכל.

dor77 31-01-11 01:38

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 794593)
מה הבעיה? כבר הגעת לשלב האחרון. שים התחברות למסד ושליפה ממנו של IP מורשה, או בדיקת סשן, או כל מה שתרצה..
אפילו במצב קיצוני: תשתמש בchallenge-response בשביל להציג את התמונות בעמוד, שלח דרך GET את הresponse ותגביל אותו לתקופת זמן של דקה. ככה הכל יעבוד פרפקט ומי שירצה לקשר מבחוץ לא יוכל.

איך אני שולף id מורשה? איפה הבדיקה מתבצעת? לפי מה הקוד בודק אם ה id מורשה?
אתה מדבר טיפה סינית בשבילי :-)
תודה רבה לך, תודה!

BlueNosE 31-01-11 15:46

תקשיב
אתה רוצה שגולש X מורשה יצפה בזה וגולש Y לא מורשה לא יצפה
מה מייחד את X על פני Y?

dor77 31-01-11 16:37

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 794679)
תקשיב
אתה רוצה שגולש X מורשה יצפה בזה וגולש Y לא מורשה לא יצפה
מה מייחד את X על פני Y?

שאלו הקבצים של x..
אבל עזוב, נראה לי שאני קרוב להגיע לזה..תראה.
כאשר המתמש ירצה להוריד קובץ אני אשלח אותו לדף שיבדוק אם הקבצים שהוא מתכוון להוריד הם אכן שלו.
אם כן אני אתן לו לנק להורדה על ידי header כזה:

PHP קוד:

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

זה בסדר?
סתם לעניין, מה אומרת השורה הזו:
header('Content-type: application/pdf');
?
באיזה סיומת הקובץ?
אפשר לוותר עלייה?

תודה.

BlueNosE 31-01-11 17:07

סתם שאלה, אם אני אגש לקובץ original.pdf איכשהו, מה אז תעשה?

וכן, זה חשוב, זה מצהיר שה-mime type של הקובץ הוא מסוג pdf. אתה יכול לשנות את זה גם לcontent/octet-stream, אם אתה רוצה לוודא שזה יוריד את הקובץ כל פעם במקום לפתוח אותו בדפדפן.

dor77 31-01-11 17:42

אז ככה,
בזמן שחיכיתי לתגובה שלך, התיישבתי על הכיסא, הפעלתי את הראש והצלחתי לעשות משהו.

אז ככה,

פה אני מקבל את הקבצים של אותו משתמש:

PHP קוד:


<?php


$dhandle 
opendir('./files');
$files = array();
if (
$dhandle) {
   while (
false !== ($fname readdir($dhandle))) {
      if ((
$fname != '.') && ($fname != '..') &&
          (
$fname != basename($_SERVER['PHP_SELF']))) {
          
$files[] = (is_dir"./$fname" )) ? "(Dir) {$fname}" $fname;
      }
   }
   
closedir($dhandle);
}

foreach( 
$files as $fname )
{
   echo 
'<a href="get_file.php?file='.$fname.'">'.$fname.'</a><br />';
}


?>

פה אני עושה בדיקה אם זה של המשתמש הזה, אם כן אני מעביר אותו אל ההורדה בhader:

PHP קוד:

<?php

פה תיהיה בדיקה


$file_name
=$_GET['file'];
$file_name_read="files/".$file_name;
header('Content-type: application/mp3');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
readfile($file_name_read);


?>

סבבה?
יש מצב שאיכשהו הצלחתי?
עוד משהו בקשר לשורה ההיא, לא כל כך הבטנתי מה עושה מה שכתבת, במה זה שונה?
עוד משהו, איך אני יכול לדעת סיומת של קובץ?
אם אני מכניס song.mp3 אז שהוא יחזיר mp3 וכנ"ל ל abc.doc?

תודה רבה.

BlueNosE 31-01-11 17:51

הכיוון טוב, חסרה לך אבטחה, ושוב - אם ניגשים לקובץ $file_name_read ישירות, מה קורה?

בשביל לדעת את הסיומת, אני כותב באוויר אז אני מקווה שזה בסדר:
PHP קוד:

$x array_pop(explode(".",$fileName)); 


dor77 31-01-11 17:54

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 794702)
הכיוון טוב, חסרה לך אבטחה, ושוב - אם ניגשים לקובץ $file_name_read ישירות, מה קורה?

בשביל לדעת את הסיומת, אני כותב באוויר אז אני מקווה שזה בסדר:
PHP קוד:

$x array_pop(explode(".",$fileName)); 


אז איך אני אאבטח את זה?
תוכל לעזור לי?
איך אני מונע מצב כזה, איך אני מבאטח את זה?

תודה.


כל הזמנים הם GMT +2. הזמן כעת הוא 00:37.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ