Browse Source

BGC-26 amelioration protection des données SCORM

frederic 3 years ago
parent
commit
2375af831c
4 changed files with 31 additions and 26 deletions
  1. 2
    2
      Entity/ZipFile.php
  2. 23
    18
      LogiproSCORMBundle.php
  3. 5
    5
      README.md
  4. 1
    1
      Services/ScormEngine.php

+ 2
- 2
Entity/ZipFile.php View File

@@ -330,9 +330,9 @@ class ZipFile extends AbstractEntity
330 330
      * @param string $zipPath
331 331
      * @param string $uploadPath
332 332
      *
333
-     * @return array
333
+     * @return bool
334 334
      */
335
-    public function uploadZipFromPath(string $zipPath, string $uploadPath)
335
+    public function uploadZipFromPath(string $zipPath, string $uploadPath) : bool
336 336
     {
337 337
         if (file_exists($zipPath)) {
338 338
             // Récupération de la signature du zip

+ 23
- 18
LogiproSCORMBundle.php View File

@@ -16,11 +16,17 @@ class LogiproSCORMBundle extends Bundle
16 16
     {
17 17
         parent::build($container);
18 18
     }
19
-
20
-    private function initialiseFolders()
19
+/**
20
+ * *creation du repertoire qui contiendra les ressources accesibles :
21
+ * ** stockage des paquets scorms (logipro_scorm.content_folder)
22
+ * * creation du fichier .htaccess qui restreindra l'acces aux ressources
23
+ *
24
+ * @return void
25
+ */
26
+    private function initialiseFolders() : void
21 27
     {
22 28
         $contentFolder = $this->container->getParameter('logipro_scorm.content_folder');
23
-        // creation du repertoir de reception  du contenu
29
+        // creation du repertoire de reception  du contenu
24 30
         if (!file_exists($contentFolder)) {
25 31
             mkdir($contentFolder, 0755, true);
26 32
         }
@@ -29,39 +35,39 @@ class LogiproSCORMBundle extends Bundle
29 35
         
30 36
         $htaccess = $contentFolder.'/.htaccess';
31 37
         // on prendra garde de doubler le \ en \\
38
+        $now = $today = date("Y-m-d H:i:s");
32 39
         $content=<<<EOT
40
+# automatically generated by LogiproSCORMBundle.initialiseFolders at $now
33 41
 Options +FollowSymlinks
34 42
 RewriteEngine On
35 43
 
36 44
 RewriteBase "$contentUrlPrefix/"
37 45
 
38
-# l'acces au ressource est donnée a une url qui contient un code correspondant à
39
-# une operation de transofrmation de la valeur du cookie
46
+#en cas d'acces à un fichier/existant existant laisse l'acces... 
47
+#...a condition d'un environnement phpsession indice (insuffisant) que c'est un utilisateur connu
48
+# (a ameliorer)
49
+RewriteCond %{REQUEST_FILENAME} -f [OR]
50
+RewriteCond %{REQUEST_FILENAME} -d
51
+RewriteCond %{HTTP_COOKIE} !PHPSESSID= [NC]
52
+RewriteRule .* - [L]
40 53
 
54
+# l'acces au ressource est donnée a une url qui contient un code correspondant à
55
+# une operation de transformation de la valeur du cookie
41 56
 
42
-#si le coockie n'existe pas alors pas droit d'acces à la ressource403 
57
+#si le coockie n'existe pas alors pas droit d'acces à la ressource : 403 
43 58
 RewriteCond %{HTTP_COOKIE} !SCORMBundle= [NC]
44 59
 RewriteRule .* - [R=403,L]
45 60
 
46
-
47 61
 #on stocke la valeur du cookie...
48 62
 RewriteCond %{HTTP_COOKIE} SCORMBundle=([^;]+)
49 63
 RewriteRule ^(.*) $1 [E=md5scormkey:%1]
50 64
 
51
-#RewriteRule .* https://www.logipro.com/%{ENV:md5scormkey} [L]
52
-
53
-# on recupere la clef contenu dans la chaine
65
+# on recupere la clef contenue dans la chaine
54 66
 RewriteCond %{REQUEST_URI} ^$contentUrlPrefix/([^/]+)/(.+)$
55 67
 RewriteRule .* - [E=key:%1,E=resource:%2]
68
+RewriteCond expr "md5('%{ENV:key}') == %{ENV:md5scormkey}"
56 69
 
57
-RewriteCond expr "md5('%{ENV:key}') = '%{ENV:md5scormkey}'"
58
-
59
-#on compare la valeur du cookie à ce qu'il y dans l'url : oui il faut connaitre un peu les expression perl
60
-# une reference arriere est noté \\n dans une chaine
61
-#RewriteCond %{ENV:md5scormkey}:%{ENV:key} ^(.*):\\1
62
-#RewriteCond %{REQUEST_FILENAME} !-f
63 70
 RewriteRule .* $contentUrlPrefix/%{ENV:resource} [L]
64
-
65 71
 EOT;
66 72
 
67 73
         $handle = fopen($htaccess, 'w');
@@ -73,6 +79,5 @@ EOT;
73 79
         if (!file_exists($packageFolder)) {
74 80
             mkdir($packageFolder, 0777, true);
75 81
         }
76
-
77 82
     }
78 83
 }

+ 5
- 5
README.md View File

@@ -41,8 +41,8 @@ php bin/console doctrine:schema:update --force
41 41
 Security
42 42
 --------
43 43
 
44
-Package resources access has cookie authentification. It allows application access only to user 
45
-owning resources. For instance none would be able to access diurecly by url.
44
+Package resources access has cookie authentification. It allows application access only to user
45
+owning resources. For instance none would be able to access directly by url.
46 46
 (example : http://yourdomaine/content/SeqPostSCORM20044th/imsmanifest.xml will return a 403)
47 47
 
48 48
 You must configure the following things :
@@ -51,11 +51,11 @@ You must configure the following things :
51 51
 logipro_scorm:
52 52
   package_folder: '%kernel.project_dir%/private/packages'
53 53
   content_folder: '%kernel.project_dir%/public/content'
54
-  content_url_prefix: '/lms/content'
54
+  content_url_prefix: '/content'
55 55
 ```
56 56
 
57
-A special .htacces will be autogenerated in content_folder and url_prefix will be used to
58
-create url access to ressources, like this : https://yourdomain/content_url_prefix/CODE/ressourceofapackage
57
+A special .htacces file will be autogenerated in content_folder and url_prefix will be used to
58
+create url access to resources, like this : https://yourdomain/content_url_prefix/CODE/ressourceofapackage
59 59
 
60 60
 Resources
61 61
 ---------

+ 1
- 1
Services/ScormEngine.php View File

@@ -104,7 +104,7 @@ class ScormEngine implements ContainerAwareInterface
104 104
 
105 105
             if ($course) {
106 106
                 $response['code'] = 400;
107
-                $response['error'] = 'La clef de cours existe déjà. Utilser \'updateCourse\' pour mettre à jour un cours existant';
107
+                $response['error'] = 'La clef de cours existe déjà. Utiliser \'updateCourse\' pour mettre à jour un cours existant';
108 108
                 return $response;
109 109
             }
110 110
 

Loading…
Cancel
Save