Open ghost opened 4 years ago
Effectivement, veux tu faire un pull request pour corriger ce problème ?
Merci d'avance,
Axel
Je vais essayer mais, je ne peux rien promettre. Si je m'en sors avec l'installation d'Ikurso et avec le code, alors je ferai une pull request.
L'installation d'ikurso est expliqué dans le readme, mais comme c'est quelque chose qui est très peu utilisé (on est une toute petite équipe avec 2 principaux développeurs et quelques personnes qui nous aident ponctuellement). Du coup, si tu as des soucis, n'hésite pas à me contacter (soit ici, soit par l'intermédiaire du formularie de contact sur le site). Cela permettra sans doute d'améliorer la documentation d'installation.
Saluton !
Je viens de m'occuper de l'installation. J'en ai profité pour détailler la procédure et les problèmes rencontrés. Ça permettra d'améliorer la documentation.
À noter que je suis sur une Debian 10 avec PHP 7.3.19 et MariaDB. MariaDB est totalement compatible avec MySQL (mêmes commandes/requêtes). Il faut adapter certaines commandes à son OS et à sa configuration, mais l'essentiel est là.
Création d'un utilisateur ikurso et de la base de données ikurso_database :
CREATE USER 'ikurso'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE ikurso_database;
GRANT ALL ON ikurso_database.* TO 'ikurso'@'localhost';
FLUSH PRIVILEGES;
exit
Insertion dans la base de données:
mariadb -u ikurso -p ikurso_database < sql/create-database.sql
mariadb -u ikurso -p ikurso_database < sql/create-data.sql
mariadb -u ikurso -p ikurso_database < sql/create-data-test.sql
ln -s /chemin/absolu/vers/ikurso /var/www/
chown $USER:www-data /var/www/ikurso
cat > /etc/apache2/sites-available/ikurso.conf <<EOF
<VirtualHost *:80>
ServerName ikurso.localhost
DocumentRoot "/var/www/ikurso"
<Directory "/var/www/ikurso">
Options +FollowSymLinks +Indexes
AllowOverride all
Require all granted
</Directory>
ErrorLog /var/log/apache2/error.ikurso.log
CustomLog /var/log/apache2/access.ikurso.log combined
</VirtualHost>
EOF
a2ensite ikurso
systemctl reload apache2
À la racine, créer :
config.php:
<?php
$base = "ikurso_database";
$login = "ikurso";
$motDePasse = "password";
$urlracine = "http://ikurso.127.0.0.1";
$cheminAbsolu = "/ikurso/";
$hostSmtp = "smtp.free.fr";
$portSmtp = 587;
$hostSmtpSES = "email-smtp.eu-west-1.amazonaws.com";
$portSmtpSES = 587;
$userSES = "USER_SES";
$passwordSES = "mot de passe Amazon SES";
$milestone = 1;
?>
config.js:
$urlracine = "http://ikurso.localhost";
$cheminAbsolu = "/ikurso/";
Erreur lors de l'insertion de create-data.sql
:
ERROR 1366 (22007) at line 901: Incorrect integer value: '' for column
ikurso_database
.ekzercoj
.ekzemplo
at row 1
Erreurs PHP
Warning : include(Mail.php): failed to open stream: No such file or directory in /home/cauryl/ikurso/util.php on line 9
Warning : include(): Failed opening 'Mail.php' for inclusion (include_path='.:/usr/share/php') in /home/cauryl/ikurso/util.php on line 9
Warning : include(Mail/mime.php): failed to open stream: No such file or directory in /home/cauryl/ikurso/util.php on line 10
Warning : include(): Failed opening 'Mail/mime.php' for inclusion (include_path='.:/usr/share/php') in /home/cauryl/ikurso/util.php on line 10
Edit: Retire les règles relatives à la sécurité d'Apache mises par réflexe. Hors-sujet.
Merci beaucoup pour ta procédure d'installation, je l'ai du coup ajouté dans le fichier readme.
Pour les problèmes de Warning et Mail/mime.php, il faut ajouter Pear Mail : https://pear.php.net/package/Mail
Pour le problème SQL, je viens de voir qu'il y a une erreur sur la structure de la table, il faut mettre :
CREATE TABLE ekzercoj (
`id` int(11) NOT NULL,
`komando` text NOT NULL,
`lecionero_id` int(11) NOT NULL,
`komando_detalo` text,
`ekzemplo` text,
`typo` enum('traduko-1','traduko-2','traduko-3','verkado-1','verkado-2','verkado-3','verkado-4','verkado-5','verkado-6','stelo-1','stelo-2','truoj-1','truoj-2','kompletigu','ordigu','elektu') NOT NULL,
`x2u` tinyint(1) NOT NULL,
`korektebla` tinyint(1) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
fais un drop table ekzercoj
avant pour supprimer la table.
Saluton !
Suite de l'issue #931. Le commit https://github.com/axel584/ikurso/commit/8fc6fe9340ac1c1f53a95407f89e2c70da921533 prévient l'utilisation des caractères spéciaux (à l'affichage, donc XSS) mais n'empêche pas d'essayer des requêtes Sql.
Par exemple, prenons l'url
https://ikurso.esperanto-france.org/fr/cge/lec08.php?section=5
. Il est toujours possible de demander la section 500 :https://ikurso.esperanto-france.org/fr/cge/lec08.php?section=500
.De la même manière, il est possible d’exécuter n'importe quelles requêtes ou commandes Sql. Par exemple:
https://ikurso.esperanto-france.org/fr/cge/lec08.php?section=SLEEP(30)
.Je viens de fouiller dans le code (j'apprends le php, c'était passionnant de mener ma petite enquête :smiley:) et voici le problème :
Dans les fonctions
getTitoloLecionero
,displayWarningSiLecioneroManquante
,getBoutonFinSection
,getLecioneroAntauxa
,getLecioneroVenonta
, les requêtes sont faites avec des concaténations de la manière suivante:Il est plutôt recommandé, dès qu'il y a une variable accessible aux utilisateurs, d'utiliser la forme suivante qui prévient les injections:
Également, même si c'est plutôt secondaire; il faudrait vérifier la valeur de la variable $section dans chaque fichier lec01.php, lec02.php, etc en plus de la vérification du type.