deskpro123
Zeta
Verificación en dos pasos activada
Verificado por Whatsapp
function seguridad($s) {
$s = str_replace('<','',$s);
$s = str_replace('{','',$s);
$s = str_replace('}','',$s);
$s = str_replace('iframe','',$s);
$s = str_replace('mysql','',$s);
$s = str_replace('query','',$s);
$s = str_replace('java','',$s);
$s = str_replace('php','',$s);
$s = str_replace('ú','u',$s);
$s = str_replace('á','a',$s);
$s = str_replace('é','e',$s);
$s = str_replace('ñ','n',$s);
$s = str_replace('Ñ','n',$s);
$s = str_replace('Ã*','i',$s);
$s = str_replace('ó','o',$s);
$s = str_replace('@','a',$s);
$s = str_replace('$','s',$s);
$s = str_replace('#','',$s);
$s = str_replace('(','',$s);
$s = str_replace(')','',$s);
$s = str_replace('[','',$s);
$s = str_replace(']','',$s);
$s = str_replace('.','',$s);
$s = str_replace('<','',$s);
$s = str_replace('>','',$s);
$s = str_replace('{','',$s);
$s = str_replace('}','',$s);
$s = str_replace('?','',$s);
$s = str_replace('&','y',$s);
$s = str_replace("'",'',$s);
$s = str_replace('"','',$s);
$s = str_ireplace("SELECT","",$s);
$s = str_ireplace("COPY","",$s);
}
//si son valores numericos podes usar:
if(is_numeric($_GET['a'])){}
//htmlentities
$get = htmlentities($_GET['a']);
//si solo usas un get con pocos parametros validos:
if($_GET['a'] == 'valor'){}
//Para consultas sql, usa MySQLi o PDO
PHP://si son valores numericos podes usar: if(is_numeric($_GET['a'])){} //htmlentities $get = htmlentities($_GET['a']); //si solo usas un get con pocos parametros validos: if($_GET['a'] == 'valor'){} //Para consultas sql, usa MySQLi o PDO
Depende lo que se haga, podes usar diferentes formas, yo soy de la 3 forma que te presente, como general.
Gracias amigo, solo uso GET para numeros, debo usar el primero verdad?
[MENTION=25010]deskpro123[/MENTION] Puedes utilizar tambien: Usando MySQLi
$mysqli->real_escape_string($_GET["usuario"]);
Antes de ingresar a query
<?php
include('noin.php');
$SEC = new secure();
$SEC->secureGlobals();
?>
<?php
class secure
{
function secureSuperGlobalGET(&$value, $key)
{
$_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
$_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
$_GET[$key] = mysql_real_escape_string($_GET[$key]);
return $_GET[$key];
}
function secureSuperGlobalPOST(&$value, $key)
{
$_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
$_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
$_POST[$key] = mysql_real_escape_string($_POST[$key]);
return $_POST[$key];
}
function secureGlobals()
{
array_walk($_GET, array($this, 'secureSuperGlobalGET'));
array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
}
}
?>
Lo mejor es meter utf-8 general en la codificacion de los campos, $mysqli->set_charset("utf8"), y mandas datos sin drama.
Un saludo. :encouragement:
function permitidos($textos){
$permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZñáéúóí.,-1234567890 ";
for ($i=0; $i<strlen($textos); $i++){
if (strpos($permitidos, substr($textos,$i,1))===false){
return true;
}
}
}
mmm pero esto solo es para codificar caracteres del tipo ñ o á, para posterior guardarlos en la base de datos, pero yo lo decía para las consultas de WHERE SQL, por que utf8 no hace nada si mira esto ' o " ,
Si entonces lo que hace mysql_escape_string($_GET[$key]) que también implementa cicklow en su clase es poner en los caracteres raros con diagonal \\' \\"
si alguien por GET escribe esto ' or '1'='1 olvídate! :fatigue:
También puedes utilizar esta función, solo para permitir ciertos caracteres.
PHP:function permitidos($textos){ $permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZñáéúóí.,-1234567890 "; for ($i=0; $i<strlen($textos); $i++){ if (strpos($permitidos, substr($textos,$i,1))===false){ return true; } } }
$Title = preg_replace("/[^a-zA-Z0-9\s-,()]/", "", $_GET['Title']);
Te recomiendo esto:
PHP:$Title = preg_replace("/[^a-zA-Z0-9\s-,()]/", "", $_GET['Title']);
Solo vas agregando los simbolos que deseas ocupar.
Saludos
function permitidos($textos){
$permitidos = "bcdefghijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYñáéúóí.,-1245679 @#?";
for ($i=0; $i<strlen($textos); $i++){
if (strpos($permitidos, substr($textos,$i,1))===false){
return true;
}
}
}
mmm pero esto solo es para codificar caracteres del tipo ñ o á, para posterior guardarlos en la base de datos, pero yo lo decía para las consultas de WHERE SQL, por que utf8 no hace nada si mira esto ' o " ,
Si entonces lo que hace mysql_escape_string($_GET[$key]) que también implementa cicklow en su clase es poner en los caracteres raros con diagonal \\' \\"
si alguien por GET escribe esto ' or '1'='1 olvídate! :fatigue:
También puedes utilizar esta función, solo para permitir ciertos caracteres.
PHP:function permitidos($textos){ $permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZñáéúóí.,-1234567890 "; for ($i=0; $i<strlen($textos); $i++){ if (strpos($permitidos, substr($textos,$i,1))===false){ return true; } } }
Eh, parece que no me entendiste :topsy_turvy:
En la codificación que vayas a utilizar en el campo de la tabla, en el cual implementes strings, usa la codificación "utf8_general_ci" y declarando, antes de la consulta, $mysqli->set_charset("utf8") no deberías tener problemas con los caracteres.
Hablo de apostrofes, eñes, acentos, etc. :encouragement:
Un saludo.
Son 2 cosas muy distintas, en al entrada se habla de seguridad, entonces deskpro123 busca mejorar la seguridad de su web, entonces creo que con la clase que mostró cicklow y si deskpro123 le agrega otras funciones a su gusto es más que suficiente.
Bueno lo que mencionas es el tipo de codificación que tendrá la base de datos, entonces para evitarte estos líos, cuando se crea la tabla se crea con una codificación utf8_spanish_cl y aquí te olvidas de las ñ, acentos y todo lo que queras en español.
Ya no seria necesario $mysqli->set_charset("utf8") por que ya tenes codificada la base de datos para soportar ñ, acentos, apostrofes y también debes de configurar php para que soporte dichos caracteres, sin necesidad de llamar a mysql.
Pero bueno la función que compartí fue para que se hiciera una idea deskpro123 de como podría admitir solo ciertos caracteres y rechazar otros, ya dejando por un lado lo de remplazar, carácter por carácter.
Saludos. :encouragement:
Recién veo que posteo Cicklow, a su vez, no entiendo que tanto lío haces si lo que dije es que si queres meter en la base de datos ñ, acentos y otros caracteres, para evitar tanto rollo.
Además nunca cité a Cicklow, cité tu post donde hablas de insertar datos a una consulta :topsy_turvy: como para agregar mi opinión sobre la forma de insertar un dato a la base de datos.
Un saludo :encouragement:
Lo que sucedió fue una confusión de información ya que no hablamos de insertar datos a base de datos y menos de consultas, pero antes de llegar ahí hay que proteger los datos de las variables, en este caso GET, en ninguna momento se habla de insertar datos a la base de datos, solo como mejorar una función para proteger las variables GET.
Bueno para olvidar el lio, creo que con toda la información que se ha escrito es suficiente para mejorar dicha función para la protección de las variables GET y sobre todo para la codificación de la base de datos.
Saludos. 😛8:
PHP://si son valores numericos podes usar: if(is_numeric($_GET['a'])){} //htmlentities $get = htmlentities($_GET['a']); //si solo usas un get con pocos parametros validos: if($_GET['a'] == 'valor'){} //Para consultas sql, usa MySQLi o PDO
Depende lo que se haga, podes usar diferentes formas, yo soy de la 3 forma que te presente, como general.
Sigo sosteniendo, que quién habló de insertar datos a una base de datos fuiste vos. http://forobeta.com/php/365322-ayuda-proteger-_get-php-post2964766.html#post2964766
mmm pero esto solo es para codificar caracteres del tipo ñ o á, para posterior guardarlos en la base de datos, pero yo lo decía para las consultas de WHERE SQL, por que utf8 no hace nada si mira esto ' o " ,
Si entonces lo que hace mysql_escape_string($_GET[$key]) que también implementa cicklow en su clase es poner en los caracteres raros con diagonal \\' \\"
si alguien por GET escribe esto ' or '1'='1 olvídate! :fatigue:
También puedes utilizar esta función, solo para permitir ciertos caracteres.
PHP:function permitidos($textos){ $permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZñáéúóí.,-1234567890 "; for ($i=0; $i<strlen($textos); $i++){ if (strpos($permitidos, substr($textos,$i,1))===false){ return true; } } }
testealo... usa sqliHelper 2.7 o sqlmap para testear el acceso por injection sql... yo mi code me funciona muy bien y jamas un hack...Sigo sin saber cual es el mejor metodo amigos 🙁
- - - Actualizado - - -
Amigo, si uso MYSQL ESCAPE STRING
y ' or '1'='1
me sale asi:
\' or \'1\'=\'1
Estoy a salvo de una injection SQL o no?
[MENTION=9679]cicklow[/MENTION] ... amigo, eso me salva???
Muchas gracias.
testealo... usa sqliHelper 2.7 o sqlmap para testear el acceso por injection sql... yo mi code me funciona muy bien y jamas un hack...
<?php
include('noin.php');
$SEC = new secure();
$SEC->secureGlobals();
?>
$urls=$_POST["urls"];
Queria usar tu code pero no lo entiendo bien, osea solo hace falta poner
Insertar CODE, HTML o PHP:<?php include('noin.php'); $SEC = new secure(); $SEC->secureGlobals(); ?>
En los php que uso GET y POST y automaticamente protege esas variables???
osea si pongo
Insertar CODE, HTML o PHP:$urls=$_POST["urls"];
Ya es seguro si tiene tu codigo arriba?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?