11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
je viens de créer un formulaire nommé "form1". Dans ce formulaire un seul champ password nommé "password1" avec bouton envoyer.

Je cherche à faire: tu entres une valeur dans le champ password, tu valides et tu es redirigé vers le nom du dossier que tu as saisi.
Ex. mon password est "1234", quand je valide je suis redirigé vers "http://www.monsite.com/1234/index.html

Est-il possible de faire tout ça simplement avec un script javascript par exemple? Il me faudrait aussi un message d'erreur dans le cas où le dossier n'existe pas (mot de passe invalide).

Merci d'avance pour votre aide.
Salut,

comme JavaScript peut être désactivé/indisponible il faut faire cela côté serveur. En PHP il suffira de récupérer la variable et de tester l'existence du répertoire à l'aide de is_dir. S'il existe il suffit ensuite de faire une redirection avec header.


Edit: d'ailleurs comme ça ne prend que quelques lignes :
<?php
$erreur = false;
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	$dossier = !empty($_POST['motdpass']) ? strtolower(trim($_POST['motdpass'])) : '';
	if(!empty($dossier)) {
		if(preg_match('/[^a-z0-9]/', $dossier)) {
			$erreur = 'Mot de passe invalide !';
		} elseif(is_dir($dossier)) {
			header("Location: $dossier");
		} else {
			$erreur = 'Mot de passe invalide !';
		}
	} else {
		$erreur = 'Saisir un mot de passe !';
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test formulaire</title>
</head>
<body>
<?php if($erreur) { echo "<p>$erreur</p>\n"; } ?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<p>
		<label for="motdpass">Mot de passe : </label>
		<input type="password" name="motdpass" id="motdpass" />
		<input type="submit" value="OK" />
	</p>
</form>
</body>
</html>

Modifié par Heyoan (24 May 2009 - 06:56)
Bonjour,

J'ai juste une question au niveau de la sécurité:

Si tu fait comme ça, il y aura moyen de récuperer le mot de passe très facilement non?

je vois pas trop l'intérêt ?


(Oupss, il y avait 2 questions en faite Smiley murf )

Bye,
Hello,

zabka a écrit :
Si tu fait comme ça, il y aura moyen de récuperer le mot de passe très facilement non?
eh bien c'est vrai que la sécurité pourrait être améliorée (login, sessions, cookie, etc.) mais en l'état il n'y a que la personne qui saisit un mot de passe qui voit la suite (dont le mot de passe dans l'URL).
Heyoan a écrit :
mais en l'état il n'y a que la personne qui saisit un mot de passe qui voit la suite (dont le mot de passe dans l'URL).

Ou toute personne qui:
- intercepte les paquets HTTP, ou
- regarde par dessus l'épaule de la personne qui a entré le mot de passe.

Pour des contenus ayant besoin d'une sécurité très faible, si ce système de «mot de passe» est une simple commodité plus qu'un mécanisme de sécurité, ça peut aller. Autrement c'est assez limite.
Merci pour vos réponses. Je vais étendre ma question.

Je cherche un mécanisme de sécurité qui donne un accès limité à ce que tu payes (photos). La personne qui se connectera aura déjà payé les photos, elle se servira de cet accès restreint pour télécharger les photos achetées. Je lui transmettrai le lien.

En gros, tu ne dois voir que tes photos. La sécurité directe dépendra entre autre des règles de sécurité du mot de passe. Après, si un hacker arrive à lister toutes les photos présentent sur le serveur et à les télécharger, le contenu n'est pas top secret donc ça ne m'inquiète pas plus que ça. J'estime donc avoir besoin d'une sécurité moyenne.

Comme je ne connais quasiment rien en programmation (mais Internet aide beaucoup) je ne peux pas non plus en demander trop. C'est pour ça que je comptais exporter des galeries photos (en HTML) et simplement indiquer le lien.

Quelle solution envisageriez-vous pour ce cas de figure? Merci par avance.
Plutôt qu'une page de connexion, je donnerais directement un lien du type:
http://example.com/photos/<une_chaine_aléatoire>/

Où la chaine correspond à un nom de dossier. Ça peut se gérer automatiquement, ou manuellement.

Un générateur de chaines aléatoires:
http://www.random.org/strings/ (un exemple de résultat)

Si tu veux pouvoir retrouver facilement quel dossier correspond à quoi, tu peux avoir une structure comme ceci:
http://example.com/photos/<nom_acheteur>/<une_chaine_aléatoire>/
Voire:
http://example.com/photos/<nom_acheteur>/<date>/<une_chaine_aleatoire>

Ce qui peut donner (avec quelques variations):
http://download.example.com/dupontm/20090524/f4vv65u3/
http://download.example.com/richardsonj/20090312/pxy8yiww/

Avec un système comme celui-ci, nom+date pourraient éventuellement suffire à donner une protection très basique (et donc très limitée) mais satisfaisante.

Ici, la faille c'est que la personne qui reçoit le lien peut tout à fait communiquer ce lien à d'autres personnes. Ceci dit, même avec un système plus complexe (qui utiliserait un nombre limité de téléchargements pour un lot donné, par exemple), ça n'empêcherait pas la personne qui a accès aux images de les partager par ses propres moyens après les avoir récupérées.
Modifié par Florent V. (24 May 2009 - 17:00)
Ça me semble tout à fait adapté comme solution. Reste plus que la mise en place et là ça se gâte, concrètement on fait comment. Si tu pouvais m'indiquer un début de piste...

Je pencherai plus pour
http://example.com/photos/<nom_acheteur>/<une_chaine_aléatoire>/

Serait-il possible d'utiliser loadURL inclus dans Spry.
http://labs.adobe.com/technologies/spry/samples/utils/loadURL.html

Merci pour ton aide Florent.
Modifié par Florent V. (25 May 2009 - 12:24)
olimart a écrit :
Reste plus que la mise en place et là ça se gâte, concrètement on fait comment.

Eh bien si tu as un petit volume à gérer, le plus simple est de le gérer à la main. Avec un client FTP, tout simplement. Côté configuration du serveur, il faudra juste s'assurer que les dossiers ne soient pas indexables, par exemple pour un serveur Apache avec un Options -Indexes (dans la configuration d'Apache ou un fichier .htaccess).

Maintenant, s'il s'agit d'automatiser le processus pour gérer de gros volumes... eh bien il faut se développer une application qui va bien, ce qui requiert des compétences relativement solides en développement web (avec PHP, Python, Perl, Ruby ou autre).
J'ai trouvé ce script
http://www.designerwiz.com/JavaScripts/go_to_url_input.htm

qui permet d'aller à une URL spécifiée. Ce que j'essaie de faire c'est assez semblable.
L'utilisateur entre un code "123456" et valide. Le script (je pense) vérifie que le code est valide (c'est-à-dire qu'il fait référence à un dossier existant) redirige l'utilisateur vers une page du style monsite.com/photos/123456/

Pensez-vous que c'est jouable de cette manière en adaptant ce script? Tout début de réponse et/ou de script est accepté. Smiley cligne Merci par avance.


Modération: suppression de la citation complète du message précédent. Les citations servent à rebondir sur des passages particuliers, il est inutile de citer intégralement un message, surtout quand il s'agit du dernier message en date.
Modifié par Florent V. (26 May 2009 - 12:21)
olimart a écrit :
Le script (je pense) vérifie que le code est valide (c'est-à-dire qu'il fait référence à un dossier existant) redirige l'utilisateur vers une page du style monsite.com/photos/123456/

Et ça sert à quoi, concrètement? À donner une URL plus un code, au lieu de donner directement l'URL finale? J'ai du mal à voir l'intérêt de la manoeuvre.
Je me dis que l'utilisateur retiendra plus facilement un code qu'une URL complète et que ça donne une protection minimum pour lister les galeries photos.
Hmm... oui, ça reste à voir. Un code se retient plus facilement qu'une URL complète, mais une URL complète envoyée par email ça se retrouve (recherche de l'e-mail) et ça se met en marque-page/favori/signet. Si l'utilisateur est redirigé et ne constate pas la redirection avec modification de l'URL, il ne pensera sans doute pas à créer un marque-page/favori/signet.

Retenir de mémoire un code du type «of06rm0f», c'est pas évident. Les utilisateurs en général ne retiennent qu'un mot de passe, à savoir celui qu'ils utilisent absolument partout.

Quoi qu'il en soit, si tu retiens l'idée d'un formulaire où l'utilisateur saisit un code alors ce traitement devrait être fait côté serveur. En PHP, par exemple. JavaScript n'est pas le bon outil pour ça.