Foros del Web » Programando para Internet » PHP »

Que forma eligirían? - Sobre Base de datos

Estas en el tema de Que forma eligirían? - Sobre Base de datos en el foro de PHP en Foros del Web. Desde el punto de vista del rendimiento del servidor cual elegirían? 1. Crear una tabla de comentarios para Blogs y OTRA tabla para Descargas ó ...
  #1 (permalink)  
Antiguo 14/11/2008, 11:23
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Que forma eligirían? - Sobre Base de datos

Desde el punto de vista del rendimiento del servidor cual elegirían?
1. Crear una tabla de comentarios para Blogs y OTRA tabla para Descargas
ó
| id | comentario | author | fecha
| 20 | Text... | Author | 2145878621
2. Crear solo una tabla para los 2 módulos, eso si agregar una columna más en el que el campo sería a cual módulo pertenece.
| id | comentario | author | fecha | tipo
| 20 | Text... | Author | 2145878621 | blogs

Por cierto por que algunas webs mencionan Sql inject? es una forma de Hackear? por que addslashes o quitar comillas "" en los Get o post para ingresar datos? , cómo funciona, en que forma pueden hackear o tirar base de datos?

Saludos y muchas gracias de antemano.
  #2 (permalink)  
Antiguo 14/11/2008, 11:34
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Que forma eligirían? - Sobre Base de datos

Es complejo, ambas te funcionarán, y digo que es complejo porque es proporcional a la cantidad de lecturas y escrituras que tengas, a los indices y hasta al tipo de tabla que crees para tal uso.

Contanos un poco más el flujo de datos que tendrás y si pensas manejarlo con algún sistema especial para la lectura cache por ejemplo.

Ah!, edit...me olvidaba del injection. Si, es complicado, hay muchas maneras de entrar y addslashes no cubre todas las posibilidades. Lo mejor es tratar los datos, o simplemente al menos usar los datos de entrada con http://php.net/mysql_real_escape_string
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 14/11/2008, 14:21
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Que forma eligirían? - Sobre Base de datos

Tal asi como lo puse en el ejemplo y son diferentes módulos: comentarios para screenshots, wallpappers, descargas, noticias. Creo que mejor sería la 2 no?.
y En todos los modulos llamaría algo parecido a mssql_query("SELECT contenido FROM commentarios WHERE type='descargas'");

Con respecto al mysql_real_escape_string, hay veces que un registro tiene caracteres especiales, pero aun no entiendo, me podías decir como lo hacen? me refiero a hackearlo injectarlo no se, cuando sepa que intención tienen sabre cuál es el problema es lo que ahora no entiendo.

Saludos y gracias de nuevo.
  #4 (permalink)  
Antiguo 14/11/2008, 14:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Que forma eligirían? - Sobre Base de datos

Estás usando MYSQL o SQL SERVER?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 15/11/2008, 08:59
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Que forma eligirían? - Sobre Base de datos

Mysql, perdon me equivoque tambien uso MSSQL pero para otra cosa.
  #6 (permalink)  
Antiguo 15/11/2008, 12:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Que forma eligirían? - Sobre Base de datos

No me dijiste del flujo de contenidos (corté con la pregunta del tipo de db porque cambiaría el rumbo de las cosas) que tendrás o al menos que esperas tener, mismo de lecturas y escrituras.

Después, fijate a vos que te queda mejor a modo sistema, por ahí te ahorras mucho trabajo centralizando todo en una página (aunque en vez del "... where type='$vartype' ..." podrías hacer un"Select * from $tbltype ...".

En fin, para hilar fino sería eso, sobre todo casos donde esperas muchas lecturas de una tabla y el resto no, dejandolas no balanceadas (por ahí nadie entra a los comentarios de wallpappers, y de ser así para que hacer que lea en una tabla con 10000000 registros de comentarios de noticias si podemos separarla).

Para saber más sobre mysql_real_escape_string

Si podés usar SP (store procedure) mucho mejor, son más seguros aún.

No sé todos los posibles ataques de hacking, pero de los más comunes es entrar por ejemplo con un having a leer todas las tablas y campos de la db, la idea es que tu aplicación me deje meter esto dentro usando ';-- etc para poder cortar tu query y que se ejecute el mio, un ej corto:

Código PHP:
$sql "Select * from tbl where codigo = '$_GET['codigo']'"
En el mejor de los casos tendrás una salida así: Select * from tbl where codigo = '1';
Pero bien podrías tener:

Select * from tbl where codigo = '';drop tbl;select '';

Si sabes manejar que produce cada error podrías ir tirando gruoups, havings y un etc para saber que campos componen que tablas y así ir navegando; más cuando muchos dejan puesto el famoso or die mysql_error (eso en production NO DEBE ESTAR, el usuario jamás debería ver nuestros errores)

Fuera de esto, en los comentarios es muy común el SPAM (usá un buen captcha), las puteadas, el XSS y demás...no solo a ataques de injection estás expuesto!

Y Ojo, todo dato de entrada es peligroso, uno de los peores casos son uploads donde no controlan los tipos de archivos, ahí ni te cuento lo que te pueden llegar a hacer.

En fin, un poco de todo...espero que resuelva alguna de tus dudas
Saludos.



EDIT: Otra cosa es siempre leer (y buscar si es necesario la información) y estar al tanto, nuestros scripts e ideas no terminan en nosotros (nadie es tan bueno para superar a toooodos los programadores juntos, siempre alguie tiene ideas sorprendentes).
Te pongo un ejemplo, una página atrás tenés temas como este: http://www.forosdelweb.com/f18/segur...ercion-644521/ y es algo que se plantea seguido.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 15/11/2008, 15:47
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Que forma eligirían? - Sobre Base de datos

Muchas gracias por la respuesta, ahora entiendo como pueden hacerlo ya que sobre el GET se hace la consulta con una comilla
Ya implemente un Captcha
Ya filtre las malas palabras, estos si que se envian, pero para imprimirlas no.
Filtre o mejor dicho puse htmlspecialchars para que no me pongan html, aparte puse un BB code simple.
Uso consultas tipo
$txt = stripslashes($_GET["type"]);
$txt = addslashes($_GET["type"]);
$buscar = " where name like '%" . $txt . "%'";
Será seguro agregar el strip y addslashes?
Por ahí encontre una funcion para no tener dolores de cabeza, estos aplicarlos en todos los post y get.

Código PHP:
function protect1($protected) { // This Will be the fuction we call to protect the variables.
    
$banlist = array ("'""\"""<""\\""|""/""=""insert""select""update""delete""distinct""having""truncate""replace""handler""like""procedure""limit""order by""group by""asc""desc"); 
    
//$banlist is the list of words you dont want to allow.
    
if ( eregi "[a-zA-Z0-9@]+"$protected ) ) { // Makes sure only legitimate Characters are used.
        
$protected trim(str_replace($banlist''$protected)); // Takes out whitespace, and removes any banned words.
        
return $protected;
        
//echo "+";
    
} else {
        
//echo "-";
        
echo $protected;
        die ( 
' Is invalid for that spot, please try a different entry.' ); // Message if thier is any characters not in [a-zA-Z0-9].
    
// ends the if ( eregi ( "[a-zA-Z0-9]+", $this->protected ) ) {
// ends the function Protect() { 
Ni modo en los comentarios todos son en español y sería raro alguien escriba Delete en un comentario, asi que lo filtro, tambien sería una solución.
  #8 (permalink)  
Antiguo 15/11/2008, 16:24
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Que forma eligirían? - Sobre Base de datos

Las malas palabras no las elimines (no me quedo en claro que haces con ellas), podés romper un mensaje que está bien, lee el post que te deje donde explico un poco más eso. Y para los ataques xss, más usando BBCode, usá http://snipplr.com/view/1848/php--sacar-xss/



PD: Usando mysql_real_escape_string no deberían hacerte injection, así que no uses cosas para sacar delete y esas pavaditas, pensá que está hecha por quienes saben como podés llegar a entrar.

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 15/11/2008, 20:29
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Que forma eligirían? - Sobre Base de datos

Ok vamos a darle uso del mysql_real_scape, no me gustaba primero por que talvez haya menos rendimiendo en la base de datos, y con respecto al xss, no es más facil quitar los tags <> y el texto javascript?
  #10 (permalink)  
Antiguo 16/11/2008, 08:12
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Que forma eligirían? - Sobre Base de datos

Es viejo, pero interesante: http://www.forosdelweb.com/f18/segur...icarse-451873/
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #11 (permalink)  
Antiguo 16/11/2008, 08:42
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Que forma eligirían? - Sobre Base de datos

Lo del Xss, no se pero no es mejor solo quitar los tags<> y reemplazarlos por &gt; o &lt; ? no creo que en los comentarios de una página de juegos hablen sobre html o php, así que con más razón no se.
  #12 (permalink)  
Antiguo 16/11/2008, 09:39
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Que forma eligirían? - Sobre Base de datos

Me parece que no estás leyendo..

Cita:
$url = sacarXss("javas&#x0A;cript:alert('XSS');")
//...
echo '<a href="' . $url . '">Enlace</a>';
nota: el mensaje xss solo se muestra en IE
__________________
Mi punto de partida es Que Bueno Lo Nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 00:46.