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

הוסטס - פורום אחסון האתרים הגדול בישראל (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 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)); 



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

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