Je travaille donc sur un formulaire d'inscription et j'ai quatre champs: nom, nom d'utilisateur, email et mot de passe. Je récupère les valeurs de ces champs dans jQuery et, si tous les champs sont remplis, je les passe sur un script PHP via ajax. Est-ce sécuritaire pour les validations de formulaire? Je craignais que les données ne soient manipulées par l'utilisateur.
Plus loin dans le script PHP, je vérifie si toutes les valeurs postées contiennent des données. Ce n'est qu'alors que je procéderai à quelques validations. Les validations sont les parties où je crains que ce ne soit pas la meilleure et qu’elle présente de nombreux défauts.
$name = $_POST['name'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
if (!preg_match("/^[A-Za-z '-]+$/i", $name)) {
$errors = "Please enter a valid name.";
} else if (!preg_match("/^[A-Za-z]+\s[A-Za-z]+$/", $name)) {
$errors = "Please enter your first and last name.";
} else if (strlen($username) <= 3 || strlen($username) > 15) {
$errors = "Please pick a username between 4 - 15 characters. Be creative.";
} else if (!preg_match("/^[A-Za-z][A-Za-z0-9_.-]{4,15}$/", $username)) {
$errors = "Please pick an alphanumeric username between 4 - 15 characters.";
} else if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$errors = "Please enter a valid email.";
} else if (strlen($username )< 6 || strlen($username) > 32) {
$errors = "Your password must atleast be 6 characters.";
} else {
echo "valid";
}
Ces étapes de validation sont-elles sécurisées? Y a-t-il des trous de boucle que l'utilisateur peut manipuler les données?
Les conditions requises pour les champs sont les suivantes - ce que je ne suis pas sûr de frapper à la tête avec mon code:
Bien que vous bloquiez probablement la plupart des attaques avec la vérification fournie ci-dessus, vous ne devriez pas traiter les données comme étant sécurisées par la suite. Le problème réel ici ne concerne pas tant les validations ci-dessus, mais ce que vous faites avec les données après cela.
Si, par exemple, vous utilisiez ces données 'validées' dans une instruction SQL et insériez simplement le $password
var, vous seriez ouvert aux attaques à moins que vous ne l'ignoriez correctement avant de l'utiliser.
De plus, vous êtes trop restrictif. Si, par exemple, mon nom comportait trois parties, il serait invalide selon vos spécifications.
Sur une note de bas de page: vous validez $username
au lieu de $password
.