Sécuriser son formulaire de recherche (protection anti-robot)

WRInaute accro
Bonsoir

Alors je ne cherche pas à savoir comment sécuriser mon formulaire des failles XSS et autres injections sql. Pour cela je pense avoir compris le minimum à savoir (découpage de la recherche saisie, retrait de certains mots clés, requêtes préparées, htmlspecialchars à l'affichage)

Je cherche surtout une méthode pour éviter qu'un utilisateur copie le formulaire pour tester en distant celui ci afin de repérer plus facilement et rapidement les failles éventuelles. En gros un moyen de se protéger des robots.

Alors j'utilise en général les Tokens pour la plupart des mes formulaires mais pour celui-ci je bloque.

Le formulaire est en GET (plus simple pour la pagination, et si la page de recherche est linké quelque part c'est plus pratique)

Le soucis avec le token c’est qu'il faudrait également le passer en GET et la évidemment ça pose problème car la page des résultats serait valable juste une fois ou au pire une courte période (il y aurait d'ailleurs le même soucis en POST). Donc si l'internaute visite un des résultats puis revient en arrière évidemment le token n’est plus bon ou pourrait ne plus l'être.
Idem si un utilisateur partage sur la toile le lien de sa recherche, ce lien ne serait plus valable.

Se baser sur le referer semble inutile également, donnée peu fiable.

vers quelle solution se tourner? je pourrais éventuellement me baser sur un nombre maxi de recherche par jour/IP, mais est-ce suffisant? sachant que si une recherche retourne 20 pages de résultats et que l'internaute visite ces 20 pages. Ca lui comptabiliserais 20 recherches
 
WRInaute accro
Re: Sécurisé son formulaire de recherche ? (protection anti-robot)

je n'ai pas de [...]&submit=Recherche , pourquoi voudrais tu que le bouton submit apparaisse dans l'url?

En mettant juste ce code, je n'ai pas ce problème :

Code:
<button type="submit" class="btn btn-default">Ok</button>

Du moins tant que je ne met pas name="" dans la balise

et je n'arrive pas a voir comment avec ça comment on se prémunit d'un éventuel robot :oops:

D'ailleurs généralement c’est ce que je fais avec la plupart de mes formulaires qui sont en post, si celui-ci est validé je fais une redirection pour éviter les soumissions multiples. la dans le cas du formulaire de recherche une soumission multiples de la même recherche n’est pas un problème en soit.

Je veux éviter qu'un utilisateur utilise un quelconque robot qui recherche des failles dans le formulaire en soumettant divers tentatives d'injections. Et éviter par la même occasion les abus de recherches qui pourraient surcharger le serveur.
 
WRInaute accro
Re: Sécurisé son formulaire de recherche ? (protection anti-robot)

noren a dit:
En mettant juste ce code, je n'ai pas ce problème
OK, c'est parce que pas de name="" sur le submit, ça l'évite oui.

Si tu as bien échappé la query SQL et affiché les datas soumises via htmlspecialchars, je ne vois pas d'autres soucis. Pas besoin de protection CSRF (token) pr ce form.
 
WRInaute accro
Re: Sécurisé son formulaire de recherche ? (protection anti-robot)

Merci

quand tu parles d'échappement de la query SQL j'imagine que tu fais allusion a mysqli_real_escape_string ou addslashes?
J'imagine que les requêtes préparées suffisent?

Surtout qu'en plus j'ai également une petite fonction qui fait supprime certains mots de la chaine avant de la découper et d'effectuer la requête:

Code:
str_ireplace(array("--", "script ", "/script", "<script", "script>","where", "update ", "update%20", "insert ", "insert%20", "delete ", "delete%20", "select ", "select%20", "href", "img%20", "img ", "HTML", "javascript", "count ", "count%20", "onclick", "onfocus", "=", " from ", "%20from%20", " and ", "%20and%20")," ",$chaine);

je l'utilise uniquement dans les cas ou ces mots n'ont aucune raison d'y être (je suis très parano) :mrgreen:

Si faille il y a , il faudrait vraiment que le pirate se prenne la tête, mais avec les robots qui testent rapidement les formulaires ont est jamais trop prudent. (J'ai essayé par exemple SQL Inject ME, ça fait froid dans le dos tous ces outils)
 
WRInaute accro
Re: Sécurisé son formulaire de recherche ? (protection anti-robot)

noren a dit:
quand tu parles d'échappement de la query SQL j'imagine que tu fais allusion a mysqli_real_escape_string ou addslashes?
J'imagine que les requêtes préparées suffisent?
*_real_escape_string et requêtes préparées oui, mais pas addslashes() qui n'est pas fait pour.
 
WRInaute accro
Re: Sécurisé son formulaire de recherche ? (protection anti-robot)

noren a dit:
Surtout qu'en plus j'ai également une petite fonction qui fait supprime certains mots de la chaine avant de la découper et d'effectuer la requête
Je comprends pas trop tes doublons dans la fonction mais peut importe ... on corrige pas une requête foireuse on exit point barre (et au passage on ban l'IP).
 
WRInaute accro
Re: Sécurisé son formulaire de recherche ? (protection anti-robot)

oui j'ai vu ces doublons au moment ou j'ai posté mais je suis allé bouffer :oops: . J'ai fait une petite modif que je dois encore améliorer.

Code:
public function Inject($chaine) {
	$chaine = str_ireplace(array("%20", "<", ">","%3C", "%3E", "/", "%2F","=", "%3D", "--")," ",$chaine))
	return str_ireplace(array(" script "," where ", "update ", "insert ", "delete ", "select ", "href", "img ", "HTML", "javascript", " count ", "onclick", "onfocus", " from ", " and ", " outfile ")," ",$chaine);
    }

Après effectivement je pourrais annuler la requête si un mot douteux est présent, ban je sais pas trop faut être certain de ne pas bannir une personne qui a la base ne le méritais pas. Et bannir selon quoi? l'ip?
je pourrais retourner true ou false et envoyer ou non le formulaire (c’est pas faux). je pourrais d'ailleurs faire croire qu'il est envoyé alors qu'il ne l'ai pas pour éviter de donner des pistes à l'éventuel pirate.
faut surtout que j'évite de retirer ou d’empêcher des mots qui pourraient exister dans la langue française. C'ets pour ca que je laisse parfois des espaces ou non

Normalement un utilisateur n'a aucune raison de mettre ces mots et ça peut éventuellement éviter certains risques dans l'éventualité ou on aurait laissé un trou quelque part.
 
Discussions similaires
Haut