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