Autor Tema: [Ayuda] - Proteger el Registro  (Leído 1057 veces)

Desconectado Klum

  • PHPer@ Fijo
  • ***
  • Mensajes: 203
  • Karma: 61
  • Sexo: Masculino
  • Progamador & Diseñador
    • Ver Perfil
    • Chat - KlumShader
[Ayuda] - Proteger el Registro
« en: 24 de Octubre de 2010, 10:23:00 am »
Hola PHPeros, estoy haciendo un proyecto y tengo el registro, lo que veo es que mucha gente suele poner:
<h1>hola</h1>

Le he puesto esto a el codigo de usuario:
$usuario=htmlspecialchars($_POST[&#39;usuario&#39;]);

Pero lo que quiero es que si ponen en el form, algún caracter especial, (no digo comas, ni eso) si no entre:
<, >, $, codigos que pueden "hackear" o como se diga, cuando le des a enviar, te ponga: ¡NO SE ADMITEN CARACTERES ESPECIALES!

Y no se como hacerlo, me gustaria que me ayudarais, doy Karma.
Klum.



Comunidad PHPeros

[Ayuda] - Proteger el Registro
« en: 24 de Octubre de 2010, 10:23:00 am »

Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[Ayuda] - Proteger el Registro
« Respuesta #1 en: 24 de Octubre de 2010, 11:03:44 am »
Hace mucho no estoy con PHP asique capaz estoy algo oxidado jeje.
Bueno, algo bastante sencillo y que se me ocurre ahora es poder usar strrpos()


<?php
$usuario
=&#39;HOLA<HOLA&#39;;
if (strrpos("$usuario", &#39;<&#39;)) {
echo &#39;SIGUE&#39;;
}else{
echo &
#39;NO SIGUE&#39;; }
?>


Esta seria una manera sencilla pero poco practica porque deberas llamar a strrpos() en cada caracter especial ya que no deja buscar mas de uno a la vez.
strrpos() lo que hace es buscar '<' en "$usuario" y devuelve el numero del lugar en el que se encontro o devuelve FALSE si no se encontro. En el ejemplo devolveria 4 (empieza a contar desde 0) y por lo tanto se tomaria como TRUE.

Saludos.

Desconectado Klum

  • PHPer@ Fijo
  • ***
  • Mensajes: 203
  • Karma: 61
  • Sexo: Masculino
  • Progamador & Diseñador
    • Ver Perfil
    • Chat - KlumShader
Re:[Ayuda] - Proteger el Registro
« Respuesta #2 en: 24 de Octubre de 2010, 11:08:46 am »
¿Seria algo asi?
 
  include(&#39;conectar.php&#39;);
 
$usuario=htmlspecialchars($_POST[&#39;usuario&#39;]);
 
$clave=$_POST[&#39;clave&#39;];
 
$correo=$_POST[&#39;correo&#39;];
 
$repeat_clave=$_POST[&#39;repeat_clave&#39;];
 
$clave_codificada=$_POST[&#39;clave&#39;];
 
if($_POST[&#39;registrar&#39;]){
 
if($usuario==NULL or $correo==NULL or $clave==NULL or $repeat_clave==NULL) { 
 if (
strrpos("$usuario", &#39;<&#39;)) {
 
echo &#39;SI&#39;;
 
}else{
 echo &
#39;NO &#39;; } {
 
echo "Has dejado algún campo en blanco."; } 
 else { if(
$clave!=$repeat_clave){
 echo 
"Las claves no coinciden, vuelve a escribirlas."; }
 else {


Te has ganado un Karma, ¡saludos!
Responde a la pregunta tambien haber si debería ir asi, gracias :-[
« Última modificación: 19 de Diciembre de 2010, 16:11:46 pm por Klum »



Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[Ayuda] - Proteger el Registro
« Respuesta #3 en: 24 de Octubre de 2010, 11:16:06 am »
¿Seria algo asi?
 
  include(&#39;conectar.php&#39;);
 
$usuario=htmlspecialchars($_POST[&#39;usuario&#39;]);
 
$clave=$_POST[&#39;clave&#39;];
 
$correo=$_POST[&#39;correo&#39;];
 
$repeat_clave=$_POST[&#39;repeat_clave&#39;];
 
$clave_codificada=$_POST[&#39;clave&#39;];
 
if($_POST[&#39;registrar&#39;]){
 
if($usuario==NULL or $correo==NULL or $clave==NULL or $repeat_clave==NULL) { 
 if (
strrpos("$usuario", &#39;<&#39;)) {
 
echo &#39;SI&#39;;
 
}else{
 echo &
#39;NO &#39;; } {
 
echo "Has dejado algún campo en blanco."; } 
 else { if(
$clave!=$repeat_clave){
 echo 
"Las claves no coinciden, vuelve a escribirlas."; }
 else {


Te has ganado un Karma, ¡saludos!
Responde a la pregunta tambien haber si deveria ir asi, gracias :-[

Debes ponerlo antes del htmlspecialchars()
Tambien veo que abris llaves de la nada, supongo que ahora lo corregis..

 }else{
 echo 'NO'; } {
 echo "Has dejado algún campo en blanco."; }

Otro consejo, si vas a hacer un echo que no tiene ninguna variable usa las comillas simples (''), hacen que el codigo sea mas rapido de procesar, en un codigo de 50, 100 lineas no lo notas, pero en uno de mas de 500 creeme que se notara la diferencia de carga.

Desconectado Klum

  • PHPer@ Fijo
  • ***
  • Mensajes: 203
  • Karma: 61
  • Sexo: Masculino
  • Progamador & Diseñador
    • Ver Perfil
    • Chat - KlumShader
Re:[Ayuda] - Proteger el Registro
« Respuesta #4 en: 24 de Octubre de 2010, 11:20:40 am »
Osea que lo tendria que poner así:

 include(&#39;conectar.php&#39;);

 
if (strrpos("$usuario", &#39;<&#39;)) {
 
echo &#39;SI&#39;;
 
}else{
 echo &
#39;NO&#39;; } 

$usuario=htmlspecialchars($_POST[&#39;usuario&#39;]);
 
$clave=$_POST[&#39;clave&#39;];
 
$correo=$_POST[&#39;correo&#39;];
 
$repeat_clave=$_POST[&#39;repeat_clave&#39;];
 
$clave_codificada=$_POST[&#39;clave&#39;];
 
if($_POST[&#39;registrar&#39;]){
 
if($usuario==NULL or $correo==NULL or $clave==NULL or $repeat_clave==NULL) { 
 echo 
"Has dejado algún campo en blanco."; } 
 else { if(
$clave!=$repeat_clave){
 echo 
"Las claves no coinciden, vuelve a escribirlas."; }
 else {


Una cosa, si tiene caracteres especiales te saldrá: "Tiene caracteres especiales" si le pones ese texto en el "NO" y si no tiene, pondrá "Te has registrado con exito" si lo pones en el "SI"



Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[Ayuda] - Proteger el Registro
« Respuesta #5 en: 24 de Octubre de 2010, 11:29:13 am »
Entonces te quedaria algo asi:


include(&#39;conectar.php&#39;);
if (strrpos("$usuario", &#39;<&#39;)) {
echo &#39;Tiene caracteres especiales, cambia tu nombre&#39;;
die;
} else {
// Sigue el codigo 

$usuario=htmlspecialchars($_POST[&#39;usuario&#39;]);
$clave=$_POST[&#39;clave&#39;];
$correo=$_POST[&#39;correo&#39;];
$repeat_clave=$_POST[&#39;repeat_clave&#39;];
$clave_codificada=$_POST[&#39;clave&#39;];
if($_POST[&#39;registrar&#39;]){
if($usuario==NULL or $correo==NULL or $clave==NULL or $repeat_clave==NULL) { 
echo 
"Has dejado algún campo en blanco."; } 
else { if(
$clave!=$repeat_clave){
echo 
"Las claves no coinciden, vuelve a escribirlas."; }
else {


Acordate de agregar al final de tu codigo php un } para cerrar el else del principio. Tambien acordate que esto te dice que no te podes registrar solo si tu usuario tiene '<', si tiene algun otro caracter especial te dira que SI puedes.

Desconectado Klum

  • PHPer@ Fijo
  • ***
  • Mensajes: 203
  • Karma: 61
  • Sexo: Masculino
  • Progamador & Diseñador
    • Ver Perfil
    • Chat - KlumShader
Re:[Ayuda] - Proteger el Registro
« Respuesta #6 en: 24 de Octubre de 2010, 11:51:24 am »
¿Como puedo poner mas caracteres?
if (strrpos("$usuario", &#39;<>$&#39;)) { o if (strrpos("$usuario", &#39;>&#39;, &#39;<&#39;, &#39;$&#39;)) {

He probado con la primera opcion pongo ese caracter y me sigue registrando, pongo la segunda y me da error en linea.



Desconectado NDSi

  • PHPero Avanzado
  • ****
  • Mensajes: 410
  • Karma: 8
  • Sexo: Masculino
    • Ver Perfil
Re:[Ayuda] - Proteger el Registro
« Respuesta #7 en: 24 de Octubre de 2010, 11:54:27 am »
¿Como puedo poner mas caracteres?
if (strrpos("$usuario", &#39;<>$&#39;)) { o if (strrpos("$usuario", &#39;>&#39;, &#39;<&#39;, &#39;$&#39;)) {

He probado con la primera opcion pongo ese caracter y me sigue registrando, pongo la segunda y me da error en linea.

Debes hacer de nuevo strrpos()


if (strrpos("$usuario", &#39;<&#39;)) {
echo &#39;Tiene caracteres especiales, cambia tu nombre&#39;;
die;
} else {
if (
strrpos("$usuario", &#39;>&#39;)) {
echo &#39;Tiene caracteres especiales, cambia tu nombre&#39;;
die;
} else {
if (
strrpos("$usuario", &#39;$&#39;)) {
echo &#39;Tiene caracteres especiales, cambia tu nombre&#39;;
die;
} else {
TU CODIGO
} } } 


Por eso te decia arriba arriba que es poco practico, gastas muchas lineas, pero funciona.