w3c sécurité et autre sujets qui fachent

Vince Cotta
Invité n'ayant pas de compte PHPfrance

26 mars 2012, 18:42

Bonjour amis phpiste,
Première question quel est le problème avec php lors d'un essai de validation w3c? :?:
en effet celui ci me parle d'instruction xml etc etc et me trouve 21 erreur et 10 warning :!:

voici le fameux code: (et ce n'est que mon tout petit index que se passera t'il avec mes autres pages #-o )
<?php

session_start();

require('connect.php');

$req = $bdd->prepare('UPDATE visites SET visiteurs = visiteurs +1');
$req->execute();
$req->closeCursor();
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<link href="style.css" rel="stylesheet"/>
	<title>CROIZAD - Terre Sainte</title>
</head>

<body>

	<?php include("bann.php"); ?>
	<?php include("menu.php"); ?>
	
	<div class="titre">
	Terre Sainte
	</div>
	
	<br/>
	
	<div class="news">
	<br/>
		<div class="titre2">FlashNews</div>
		<br/>
	
		<?php
		$req = $bdd->prepare('SELECT * From news');
		$req->execute();
		$data = $req->fetch(PDO::FETCH_OBJ);
		$req->closeCursor();
		?>
	
		<h5 class="red"><?php echo strip_tags($data->titre);?></h5>
		<p><?php echo strip_tags($data->contenu);?></p>
		<?php echo $data->date;?><br/><br/>
		<a href="<?php echo strip_tags($data->url);?>" target="_blank">cliquez ici</a><br/>
	</div>
	
	<div id="contenu">
		<img src="images/logo.png">
		<p>Parmi les grands rassemblements d'hommes, on ne peut oublier l'importance historique des croisades.
		<br/>Une croix cousue sur leurs habits, les croisés sont nés.
		<br/>Ils contribuèrent a faire naitre des formes de pensées et de vies nouvelles; leurs rôles dans la formation de la civilisation occidentale ne peut donc être sous-estimé.
		<br/>
		<br/>Fort de cette vision, CROIZAD est né.
		<br/>Nous vous donnons l'occasion d'afficher votre engagement.
		<br/>
		<a href="inscription.php">Rejoignez les croizés.</a>
		<br/>
		<br/>
		Thème de CROIZAD
		<br/>
		<br/>
		<audio src="Crusaders.ogg" controls>Veuillez mettre votre navigateur à jour!</audio>
		</p>

	<div id="visite">
		<?php
		$req = $bdd->prepare('SELECT visiteurs From visites');
		$req->execute();
		$data = $req->fetch(PDO::FETCH_OBJ);
		$req->closeCursor();
		?>
		
	
		Cette page à été visité <?php echo $data->visiteurs;?> fois.
	</div>
	
	</div>
	<?php include("footer.php"); ?>
</body>

</html>
J'ai honte car je ne sais pas bien encore tous les ptits trucs :oops: .

Bon et maintenant je voudrais savoir comment sécuriser mon site contre la plupart des failles (sait-on jamais :twisted: ) mais sans se prendre trop la tête (il est pas ch**** lui :roll: )

herm j'ai déja pas mal utilisé echo strip_tags(); je sais qu'il existe aussi intval(); et d'autres fonctions pour les failles cssr vachement prise de tête #-o

C'est pourquoi j'ai besoin de vos lumières :idea:

Merci d'avance :wink:

ViPHP
xTG
ViPHP | 7331 Messages

26 mars 2012, 20:15

La sécurité est un coeur de problème et il n'y a pas de solution simple. C'est toujours un gros système à mettre en place selon ce que tu veux protéger.

Concernant la norme W3C elle n'a rien à voir avec le PHP, elle concerne le HTML.
Et tu dois avoir lors de la validation toutes les erreurs et leurs explications et même une ligne pour indiquer un type de correction ou de ce qu'on devrait trouver. ;)

Vince Cotta
Invité n'ayant pas de compte PHPfrance

26 mars 2012, 20:58

Tout à fait mais c'est tout bonnement impossible à comprendre et c'est pourquoi je suis la :oops: .

Sinon j'ai une question différente.

Comment puis je écrire un texte lorsqu'une $data d'une bdd n'a pas de valeur.

Je m'explique: lors de leurs inscriptions les membres du site n’ont que peut d’informations à renseigner.
Ainsi je leurs en donne la possibilité plus tard ce qu'il fait que certaines collones de la bdd sont vide.
A un moment j'aimerais mettre sur une page tous les membres qui ont choisi un domaine en particulier sur cette bdd.
Mais si personne n'a choisi ce domaine j'aimerais mettre 'aucun membre dans ce domaine'
c'est la que je bloque.
car $data domaine me ramene à tous les membres qui l'on choisi mais pas l'inverse.

ViPHP
xTG
ViPHP | 7331 Messages

27 mars 2012, 07:06

Regardes du côté de la fonction PDO rowCount() pour mettre en place cette condition. :)

Mammouth du PHP | 2278 Messages

27 mars 2012, 07:27

Utilise l'option Clean up Markup with HTML Tidy, ça produit un html conforme.
Il me semble plus commode de faire afficher ta page dans un navigateur, y faire afficher le code source (ie le code html produit par PHP) le copier et le coller dans le Validator avec l'option direct input.
Ceci étant le validator est extrêmemnt tatillon.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Vince Cotta
Invité n'ayant pas de compte PHPfrance

01 avr. 2012, 23:38

Merci, tout ca m'a bien aidé mais malheureusement y'a comme un souci.

ceci:
<?php
session_start();

if(empty($_SESSION['membre']))
{
	header('Location: terre.php');
}

require('connect.php');

?>
<!DOCTYPE html>
<html>
    <head>
	    <meta charset="utf-8" />
		<link rel="stylesheet" href="style.css" />
		<title> CROIZAD - <?php echo $_GET['domaine'];?></title>
	</head>
	
	<body>
			<a href="terre.php"><?php include("bann.php");?></a>
			<?php include("menu.php"); ?>
			<div class="titre"><?php echo $_GET['domaine'];?></div>
			<br/>
			<?php include ("menu_croizad.php"); ?>
			 <div id="contenu">
				 <p style="font-size:45px;" >Voici les croizés du domaine <?php echo $_GET['domaine']; ?>.</p>
 </div>
 <br/>
 <?php
				 
				 $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                 $bdd = new PDO('mysql:host=localhost;dbname=croizad', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
	
				 $nombreDeMessagesParPage = 5; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$reponse = $bdd->query('SELECT COUNT(login) AS nb_messages FROM membre');
$donnees = $reponse->fetch();
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
?>
<br/>
<br/>
<div class="pagination">
<?php echo '<p>Page : </p>';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a class="pagination" href="membres.php?page=' . $i . '">' . $i . '</a> ';
}?>
</div>
					 <?php
// Connexion à la base de donnée
    
     
if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}
 
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
?>
<br/>
<?php 
$req = $bdd->prepare('SELECT * FROM membre WHERE domaine = '.$_GET['domaine'].'');
$data = $req->fetch();
$count = $req->rowCount();
if($count > 0)
{ ?>
<br/>
<div id="contenu">
<a href="profilconsultable.php?id=<?php echo strip_tags($data['id']);?>">
<?php
$filename = 'uploads/avatars/'.$data['id'].'.jpg';
if(file_exists($filename))
{
?> 
<img class="avatar" src="uploads/avatars/<?php echo ($data['id']);?>.jpg" width="150px" height="150px" title="Avatar" alt="Pas d'avatar"></a>
<?php
}
else
{
?>
<img class="avatar" src="uploads/avatars/0.jpg" width="150px" height="150px" title="Avatar" alt="Pas d'avatar"></a>
<?php
}
?>
<div class="pseudo"><a style="color:white;" href="profilconsultable.php?id=<?php echo strip_tags($data['id']);?>"><?php echo strip_tags($data['login']); ?></a></div>
 <br/>
 <br/>
 <br/>
 <br/>
 <br/>
 <br/>
 <div class="msg"><a href="manifesteconsultable.php?id=<?php echo $data['id'];?>">Son Manifeste</a>
 <br/>
 <a href="<?php echo $data['site'];?>">Son Site</a>
 </div>
</div>
<?php
}
else
{
	echo '<p style="color:red; text-align:center; text-shadow:1px 1px 1px black;">Pas de membre dans ce domaine pour le moment<br/><br/><br/>
	<br/><br/><br/>
	<br/><br/><br/>
	<br/><br/><br/>
	<br/><br/><br/>
	<br/><br/><br/>
	<br/><br/><br/>
	<br/><br/></p>';
} ?>
<br/>
<br/>
<?php include ("footer.php"); ?>
     </body>
</html>			 
ne me retourne aucune valeur et donc met sans cesse mon else bien qu'il y'ait des choses dans ma bdd.

Que faire?

ViPHP
xTG
ViPHP | 7331 Messages

02 avr. 2012, 08:58

prepare() prépare une requête préparée mais ne l'exécute pas.
Il faut utiliser execute() après pour cela.

Ensuite en parlant de sécurité... Afficher en brut sans traitement une valeur contenue dans l'url est une faille.
On pourrait très bien y insérer du javascript et il s’exécutera.
Regardes du côté de htmlentities() pour protéger la chaîne et éviter son interprétation.

ViPHP
ViPHP | 2577 Messages

02 avr. 2012, 09:34

Bonjour,

Pour la validité du code html, tout dépend du doctype (<!DOCTYPE html>). En fonction du doctype choisit, il y a tout un ensemble de règle à respecter mais j'avoue ne jamais avoir trouver de règle bien clair.
Une des règles est la fermeture ou pas des balises sans contenu comme <br> ou <br /> qui dépend d'un doctype html ou xhtml. Il y a aussi des doctype avec ou sans frame et des versions qui font que certaines balises et certains attributs sont ou non acceptés.

Vince Cotta
Invité n'ayant pas de compte PHPfrance

02 avr. 2012, 14:11

Alors merci,
en ce qui concerne la faille je suis au courant et je le met toujours en place sauf que avant cela j'essaye de mettre en place un script qui marche :lol:
Bref visiblement tout marche sauf que le rowcount() ne retourne aucun valeur;
et pour le execute jai déja essayé :cry:
Et finalement pour les DOCTYPE je m'en doutais malheureusemet on est guère avancé :mrgreen:

Vince Cotta
Invité n'ayant pas de compte PHPfrance

02 avr. 2012, 18:33

Alors j'ai trouvé mon execute n'était pas sur la bonne $variable toutefois ET oui ya un toutefois: #-o
lorsque j'enleve ma boucle while il m'affiche tout et si je la remet il ne m'affiche rien alors comment je fais pour afficher que ceux dont la $data['domaine'] == $_GET['domaine']
??? ZAT IZ ZE COUESTIONNE :?: :?: :mrgreen:

ViPHP
xTG
ViPHP | 7331 Messages

02 avr. 2012, 19:34

On peut voir ton code ? Car ton dernier ne comporte pas de boucle.