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> |