Project

General

Profile

UploadWhitelist » History » Version 1

Thanos Kyritsis, 14/09/2012 17:20

1 1 Thanos Kyritsis
h1. Upload Whitelist
2
3
h2. Προτεινόμενη εκδοχή
4
5
* 1 whitelist για όλους τους χρήστες (καινούρια εγγραφή στον πίνακα
6
config και στη σχετική φόρμα στο περιβάλλον του admin)
7
* 1 whitelist για τους καθηγητές (καινούρια εγγραφή στον πίνακα config
8
και στη σχετική φόρμα στο περιβάλλον του admin)
9
* 1 whitelist ανα χρήστη (καινούριο πεδίο στον πίνακα user και στη φόρμα
10
επεξεργασίας του χρήστη στο περιβάλλον του admin)
11
12
Πλεονέκτημα: καλύπτει κατά μέσο όρο τις ανάγκες για τα τρέχοντα
13
επίπεδα ασφάλειας χωρίς να προσθέτει επιπλέον φόρτο στις αρμοδιότητες
14
του user admin
15
16
17
h2. Εναλλακτικά σενάρια
18
19
20
h3. α) Ύπαρξη μίας γενικής whitelist στον config πίνακα (για όλους τους χρήστες) και άλλης μίας per-user
21
22
Μειονέκτημα: ο user admin δεν θα μπορεί εύκολα να χαλαρώσει τους
23
κανόνες για τους καθηγητές, οι οποίοι πιθανοτικά θα χρειαστούν
24
περισσότερη ελευθερία κινήσεων από τους φοιτητές.
25
Αν του τύχει τέτοια ανάγκη, θα πρέπει να πάει σε έναν έναν τους
26
καθηγητές (ως χρήστες) και να αλλάξει τα δικαιώματα εκεί (χρονοβόρο
27
και κοπιαστικό).
28
29
h3. β) Περισσότερες whitelists σε διάφορα σημεία για μεγαλύτερη λεπτομέρεια και ανάλυση:
30
31
πχ. στο δέντρο (για την 3.0), να υπάρχει whitelist ανα τμήμα, σχολή,
32
εξάμηνο κλπ, ή ακόμα και σε επίπεδο μαθήματος (2.6 και 3.0)
33
34
Πλεονεκτήματα: η δυνατότητα αυτή μπορεί να προστεθεί μελλοντικά αν
35
κριθεί αναγκαίο έπειτα από σχετικό feedback για την απλή εκδοχή της
36
whitelist, περισσότερη ασφάλεια διότι χαλαρούς κανόνες θα έχουν μόνο
37
οι χρήστες συγκεκριμένων μαθημάτων με περισσότερες ανάγκες
38
Μειονεκτήματα: περισσότερη δουλειά και φόρτος για τον user admin
39
(πολλά σημεία επεξεργασίας κανόνων)
40
41
42
h2. Τύποι αρχείων
43
44
Οι παρακάτω τύποι είναι ενδεικτικοί για τις default τιμές που θα
45
εισάγουμε στην πλατφόρμα (οι περισσότεροι στους φοιτητές, κάποιοι, οι
46
πιο "περίεργοι" όπως html, js, κλπ ανοιχτοί μόνο για καθηγητές):
47
48
* pdf, ps, eps, tex, latex, dvi, texinfo, texi
49
* zip, rar, tar, bz2, gz, 7z, xz, lha, lzh, z, Z
50
* doc, docx, odt, ott, sxw, stw, fodt, txt, rtf, dot, mcw, wps
51
* xls, xlsx, xlt, ods, ots, sxc, stc, fods, uos, csv
52
* ppt, pps, pot, pptx, ppsx, odp, otp, sxi, sti, fodp, uop, potm
53
* odg, otg, sxd, std, fodg
54
* odb, mdb
55
* ttf, otf
56
* php3, php4, php5, phps, phtml, html, html, js, css, xml, xsl, cpp, c, java, m, h, tcl, py, sgml, sgm
57
* jpg, jpeg, png, gif, bmp, tif, tiff, psd, dia, svg, ppm, xbm, xpm, ico
58
* 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
59
* vsd, vss, vst
60
61
62
h2. Πρωτότυπη υλοποίηση
63
64
<pre>
65
<?php
66
67
$myfile1 = 'my.doc';
68
$myfile2 = 'my.exe';
69
$myfile3 = 'my.zip';
70
$myfile4 = 'myfile';
71
72
$wh = 'doc, pdf, zip';
73
$whitelist = explode(',', preg_replace('/\s+/', '', $wh)); // strip
74
any whitespace
75
76
echo $myfile1 .' is allowed: '. isAllowed($myfile1) . "\n";
77
echo $myfile2 .' is allowed: '. isAllowed($myfile2) . "\n";
78
echo $myfile3 .' is allowed: '. isAllowed($myfile3) . "\n";
79
echo $myfile4 .' is allowed: '. isAllowed($myfile4) . "\n";
80
81
function isAllowed($filename)
82
{
83
    global $whitelist;
84
85
    if (in_array('*', $whitelist))
86
        return true;
87
88
    $ext = get_file_extension($filename);
89
    return in_array($ext, $whitelist);
90
}
91
92
// from main_lib.php
93
function get_file_extension($filename)
94
{
95
        $matches = array();
96
        /*if (preg_match('/\.(tar\.(z|gz|bz|bz2))$/i', $filename, $matches)) {
97
                return strtolower($matches[1]);
98
        } else*/if (preg_match('/\.([a-zA-Z0-9_-]{1,8})$/i', $filename, $matches)) {
99
                return strtolower($matches[1]);
100
        } else {
101
                return '';
102
        }
103
}
104
</pre>