Project

General

Profile

Actions

Upload Whitelist

Προτεινόμενη εκδοχή

  • 1 whitelist για όλους τους χρήστες (καινούρια εγγραφή στον πίνακα
    config και στη σχετική φόρμα στο περιβάλλον του admin)
  • 1 whitelist για τους καθηγητές (καινούρια εγγραφή στον πίνακα config
    και στη σχετική φόρμα στο περιβάλλον του admin)
  • 1 whitelist ανα χρήστη (καινούριο πεδίο στον πίνακα user και στη φόρμα
    επεξεργασίας του χρήστη στο περιβάλλον του admin)

Πλεονέκτημα: καλύπτει κατά μέσο όρο τις ανάγκες για τα τρέχοντα
επίπεδα ασφάλειας χωρίς να προσθέτει επιπλέον φόρτο στις αρμοδιότητες
του user admin

Εναλλακτικά σενάρια

α) Ύπαρξη μίας γενικής whitelist στον config πίνακα (για όλους τους χρήστες) και άλλης μίας per-user

Μειονέκτημα: ο user admin δεν θα μπορεί εύκολα να χαλαρώσει τους
κανόνες για τους καθηγητές, οι οποίοι πιθανοτικά θα χρειαστούν
περισσότερη ελευθερία κινήσεων από τους φοιτητές.
Αν του τύχει τέτοια ανάγκη, θα πρέπει να πάει σε έναν έναν τους
καθηγητές (ως χρήστες) και να αλλάξει τα δικαιώματα εκεί (χρονοβόρο
και κοπιαστικό).

β) Περισσότερες whitelists σε διάφορα σημεία για μεγαλύτερη λεπτομέρεια και ανάλυση:

πχ. στο δέντρο (για την 3.0), να υπάρχει whitelist ανα τμήμα, σχολή,
εξάμηνο κλπ, ή ακόμα και σε επίπεδο μαθήματος (2.6 και 3.0)

Πλεονεκτήματα: η δυνατότητα αυτή μπορεί να προστεθεί μελλοντικά αν
κριθεί αναγκαίο έπειτα από σχετικό feedback για την απλή εκδοχή της
whitelist, περισσότερη ασφάλεια διότι χαλαρούς κανόνες θα έχουν μόνο
οι χρήστες συγκεκριμένων μαθημάτων με περισσότερες ανάγκες
Μειονεκτήματα: περισσότερη δουλειά και φόρτος για τον user admin
(πολλά σημεία επεξεργασίας κανόνων)

Τύποι αρχείων

Οι παρακάτω τύποι είναι ενδεικτικοί για τις default τιμές που θα
εισάγουμε στην πλατφόρμα (οι περισσότεροι στους φοιτητές, κάποιοι, οι
πιο "περίεργοι" όπως html, js, κλπ ανοιχτοί μόνο για καθηγητές):

  • pdf, ps, eps, tex, latex, dvi, texinfo, texi
  • zip, rar, tar, bz2, gz, 7z, xz, lha, lzh, z, Z
  • doc, docx, odt, ott, sxw, stw, fodt, txt, rtf, dot, mcw, wps
  • xls, xlsx, xlt, ods, ots, sxc, stc, fods, uos, csv
  • ppt, pps, pot, pptx, ppsx, odp, otp, sxi, sti, fodp, uop, potm
  • odg, otg, sxd, std, fodg
  • odb, mdb
  • ttf, otf
  • php3, php4, php5, phps, phtml, html, html, js, css, xml, xsl, cpp, c, java, m, h, tcl, py, sgml, sgm
  • jpg, jpeg, png, gif, bmp, tif, tiff, psd, dia, svg, ppm, xbm, xpm, ico
  • avi, asf, asx, wm, wmv, wma, dv, mov, moov, movie, mp4, mpg, mpeg, 3gp, 3g2, m2v, aac, m4a, flv, f4v, m4v, mp3, swf, webm, ogv, ogg, mid, midi, aif, rm, rpm, ram, wav, mp2, m3u, qt
  • vsd, vss, vst

Πρωτότυπη υλοποίηση

<?php

$myfile1 = 'my.doc';
$myfile2 = 'my.exe';
$myfile3 = 'my.zip';
$myfile4 = 'myfile';

$wh = 'doc, pdf, zip';
$whitelist = explode(',', preg_replace('/\s+/', '', $wh)); // strip
any whitespace

echo $myfile1 .' is allowed: '. isAllowed($myfile1) . "\n";
echo $myfile2 .' is allowed: '. isAllowed($myfile2) . "\n";
echo $myfile3 .' is allowed: '. isAllowed($myfile3) . "\n";
echo $myfile4 .' is allowed: '. isAllowed($myfile4) . "\n";

function isAllowed($filename)
{
    global $whitelist;

    if (in_array('*', $whitelist))
        return true;

    $ext = get_file_extension($filename);
    return in_array($ext, $whitelist);
}

// from main_lib.php
function get_file_extension($filename)
{
        $matches = array();
        /*if (preg_match('/\.(tar\.(z|gz|bz|bz2))$/i', $filename, $matches)) {
                return strtolower($matches[1]);
        } else*/if (preg_match('/\.([a-zA-Z0-9_-]{1,8})$/i', $filename, $matches)) {
                return strtolower($matches[1]);
        } else {
                return '';
        }
}

Updated by Thanos Kyritsis about 8 years ago · 1 revisions