conseils secu pour php

Statut
N'est pas ouverte pour d'autres réponses.

Hacko

Elite
voila, je suis en train de modifier un site en php pour y rajouter forum, news, chat ....
il y a un système de login fait avec des sessions php.

Mais je me pose la question de la sécurité, alors, si vous avec des conseil, je suis prêt à vous écouter.

pour héviter des problèmes lors des posts, j'ai déja enployé la fonction strip_tags() pour héviter le javascript et le php.


d'avance merci pour tout vos conseils, puis, je ferais p-e appel à vous pour tester la securite quand il sera en place(hackers needed :wink: ).
 
la session php n'est pas stockée ds l ordi client ?
Il me semble que si donc des que le client a déco la session n'existe plus .... non ? :s

Donc je pense que tu peu laisse comme ca en session ...
 

kokotchY

Elite
un truc que tu dois absolument faire est de vérifié a chaque page que le user est connecté... car on peut toujours trouver le nom des pages...
 
koko-examen a dit:
un truc que tu dois absolument faire est de vérifié a chaque page que le user est connecté... car on peut toujours trouver le nom des pages...

ben celui ki fai pas ca c grave ... :wink: :D
 
1er
OP
H

Hacko

Elite
la session n'est pas chez le client, j'utilise session_start() ....


pour la vérifivation des sessions, comme j'utilise des pseudo frames, j'ai mis la verif de sessions dans l'index, au dessus de tout. cela me permet même de pouvoir afficher 'bonjour XXX', et de souhaiter un bon anniversaire si il y a lieu :D


ce qui me fait surtout peur, ces des possibilités de failles en mettant des paramètres en plus dans l'adresse, ou en mettant des trucs foireux dans les posts.
 
V lui foutre un code session assez sécurisé ...


Code:
/*page d'identifiaction */

<body bgcolor=black text=orange>
<br><br><br><br><br>
<table bgcolor=orange width=250 cellpadding=1 cellspacing=1 align=center>
<tr>
<td>
<form action="verif.php" method='post'>
<table bgcolor=111111 width=100% align="center" cellpadding=0 cellspacing=0 border="0">
  <tr>
   <td>
   <br>
   </td>
  </tr>
  <tr>
   <td align=center>Login :</td>
  </tr>
  <tr>
   <td align=center><input type="text" name="login" maxlength="250"></td>
  </tr>
  <tr>
   <td align=center>Password</td>
  </tr>
  <tr>
   <td align=center><input type="password"name="pass" maxlength="10"></td>
  </tr>
  <tr>
   <td align="center"><br><input type="submit" value="log in"><br><br></td>
  </form>
  </tr>
</table>

</td>
</tr>
</table>
</body>

Code:
/*verif.php*/
<?

$db = mysql_connect('localhost', 'root', '');
mysql_select_db ('teamrd', $db);
$sql = 'SELECT login, pass FROM rd_login';
$req = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

if($login=='' || $pass=='')
    {
    echo '<center><p>Vous avez oublié de remplir un champs.</p></center>';
    include('login.php'); 
    exit;
    }

$sql = "select pass from rd_login where login='$login'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_array($req);

if($data['pass'] != $pass)
    {
    echo '<center><p>Mauvais login / password. Merci de recommencer</p></center>';
    include('login.php'); 
    exit;
    }
else
    {
    session_start();
    session_register('login');

    include ('administration.php');
    
    
    }
?>

Code:
/* exemple de page sécurisée */

<?
session_start();

if(!session_is_registered('login'))
    {
    echo 'Vous n\'êtes pas autoriser a acceder a cette zone';
    include('login.php');
    exit;
    }
?>


<html>
<form method="POST" action="addcalendarverif.php">
<center>
<input type="text" name="date" size="20" value="AAAA-MM-JJ" maxlength="35"><br>
<input type="text" name="heure" size="20" value="hh" maxlength="70"><br>
<input type="text" name="adversaire" size="20" value="adv" maxlength="70"><br>
<input type="text" name="lineup" size="20" value="line up" maxlength="70"><br>
<input type="submit" value="Envoyer" name="envoyer">
</center>
</form>
<br><br><br>
</html>

Ha oui je vien de remarquer une fautes, ds le deuxieme code je fai un appel a login.php, ben c index.php ki revient
 
Hacko a dit:
la session n'est pas chez le client, j'utilise session_start() ....


pour la vérifivation des sessions, comme j'utilise des pseudo frames, j'ai mis la verif de sessions dans l'index, au dessus de tout. cela me permet même de pouvoir afficher 'bonjour XXX', et de souhaiter un bon anniversaire si il y a lieu :D


ce qui me fait surtout peur, ces des possibilités de failles en mettant des paramètres en plus dans l'adresse, ou en mettant des trucs foireux dans les posts.

Il me semblai k une session une fois le browser internet éteint, n'était plus valide ... tu associe donc avec un cookies ? ou achake fois le membres dois ce connecter ?

Pour le trucs foireux ds les posts fo faire un scripts qui interdit les commande java et compgnie, meme html ... masi alors tu dois mettre come sur ce forum, du bbcode ...
 

SUEd

Touriste
ya aussi htmlentities() et htmlspecialchars() (chui po certain pour la deuxième) pour convertir les symboles utilisé dans l'html (comme le < et le >).


Pour la sécurité :
- tu te bases sur des sessions (pas des sessions PHP, mais des sessions que tu gères toi meme)
- stockage des sessions (ID unique de session + ID unique d'utilisateur + IP de l'utilisateur + date de création + durée de validité de la session) dans table MySQL (il faut prévoir le cas des utilisateurs anonymes avec un ID spécifique et que l'on ne peut reconnaitre que par leur IP)
- stockage ID session dans cookie sur ordi de l'utilisateur

Remarque sur l'ID de la session :
- pour un utilisateur enregistré, calcule l'ID de la session en fonction de la date, de l'heure et de l'ID de l'utilisateur
- pour un utilisateur anonyme, calcule l'ID de la session en fonction de la date, de l'heure, et d'une représentation numérique de l'IP de l'utilisateur (par exemple md5($ip);)

Il me semble qu'il y a la fonction uniqid() qui calcule un nombre unique en fonction de la date et de l'heure. Sinon, tu peux aussi insérer la fonction rand() à un endroit ou à un autre, afin de rendre l'ID encore + unique :p

cela te permet d'utiliser l'auto-login et si tu développes le système, d'utiliser des préférences, pour les utilisateurs.
En effet, si tu trouves une cookie avec un ID session valable (à checker dans la table), tu récupères l'ID de l'utilisateur et tu peux charger ses préférences de la table des users. :)

Bon, c'est un peu du ptit chinois, mais n'hésite po à dire ske tu captes pas :p c'est pas réellement compliké à mettre en oeuvre, mais il faut bien réfléchir, c'est tout :)
 
1er
OP
H

Hacko

Elite
j'avais essayé de gérer les sessions moi même, mais j'avais eu un problème, je me suis énervé et j'ai repris les sessions du php :oops:


sinon, merci de tout vos conseil, je vais plancher la dessus.


si vous avez encore des conseil, n'hésitez pas...
 
R

RedCross

ex membre
Faut toujours penser au plus simple et plus évident aussi :
genre mettre toutes les pages admins de phpbb et autres dans des repertoires protégés. Effacer du serveur toutes les pages "install.php" ou autre qui sont des portes d'entrée.

enfin, ce genre de petites choses auxquelles on ne pense pas systématiquement ... ;)
 
1er
OP
H

Hacko

Elite
j'ai pas de pages admin.php, le site que je modifie, c'est moi qui l'avais fais au départ, mais j'y rajoute un forum et autre ..
 
N

niafron

ex membre
sur le tuto de nexen il y a tout un chapitre sur la secu (pas mal fait du tout je trouve bien kil ne donnt pas des methodes toutes faites mais surtout des idees)
 

kokotchY

Elite
PunkDeLuxe a dit:
koko-examen a dit:
un truc que tu dois absolument faire est de vérifié a chaque page que le user est connecté... car on peut toujours trouver le nom des pages...

ben celui ki fai pas ca c grave ... :wink: :D
tu serais surpris... j'ai déjà trouvé plein de scripts ou c pas sécurisé a toute les pages...
 
1er
OP
H

Hacko

Elite
quand j'aurais fini le site programmation, pas graphisme, c'est pas mois qui le fais, je donnerais l'adresse pour defouler vos talents de hackers.

Et celui qui arivera à trouver une faille aura un remerciement sur le site pour les tests.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut