base de datos
A juzgar por su código Veo que estás no utilizando la última versión CI (2.0.2 a partir del 06/12).
Como se indica en la changelog la función getwhere()
(que ahora se llama get_where()
) ha sido abandonado como para la versión 2.0.
En cuanto a la aplicación de everty, se recomienda encarecidamente actualizar su versión actual, ya que ha habido muchas correcciones de errores mientras tanto y siempre debe confiar en la versión más segura disponible.
mysql_real_escape_string generalmente se considera "suficiente" para proporcionar un buen nivel de seguridad en sus consultas, pero como sucedió con su predecesor (mysql_escape_string) no es 100% seguro contra todo tipo de ataque, por lo que confiamos plenamente en eso no es la mejor práctica alrededor. Aunque es seguro, todavía hay ataques que pueden pasar este filtro.
Compruebe, entre los muchos, this question on SO para obtener más información al respecto.
En codeignier: Si estaba desarrollando su aplicación personalizada, sugeriría que al menos utiliza las extensiones mysqli o, mejor aún, la clase PDO; declaraciones preparadas son indudablemente más seguras y deberían ser favorecidas sobre todo lo demás.
Pero estamos en el contexto del marco, y Codeigniter viene con 3 excelentes maneras de consultar de forma segura su base de datos, aplicando la herramienta correcta a la entrada correcta sin tener que preocuparse por eso. Estoy hablando de query bindings and manual escaping with $this->db->escape() family y Active Record Class
Puede encontrar ejemplos de uso en las direcciones URL que acabo de vincular, o leer las respuestas de otros compañeros aquí, por lo que no entraré en los detalles de cada procedimiento en esta publicación.
contraseña
En cuanto a su contraseña, como se ha dicho por otros usuarios, md5()
es una alghoritm hash ahora defectuoso. Hay tablas de arco iris por ahí que puede descifrar la contraseña MD5 en un período relativamente corto de tiempo, por lo que está mejor con algorhytms hash mayor nivel de seguridad, como sha1() o sha256, sha512, and other
en CodeIgniter: CodeIgniter viene con una clase security helper, que le proporciona una función útil, do_hash()
(podría ser dohash()
en su instalación anterior), que puede recibir el algoritmo hash. como parámetro (actualmente creo que solo admite md5 y sha1) y de forma predeterminada es sha1().
Otras observaciones
No estoy del todo claro por qué culpar a su nombre de usuario para sus inyecciones SQL. ¿Son esos los únicos 2 formularios en toda su aplicación?
No proporciona la información para indicar si usa los parámetros $ _GET o si sigue la segmentación del URI nativo, pero creo que está haciendo esto, así que supongo que está a salvo de este punto de vista.
Debería asegurarse de que no haya ningún otro formulario en su sitio web que contenga entradas ingresadas en la base de datos, de lo contrario puede asegurar su inicio de sesión cuánto desea, pero alguien podría penetrar a través de una puerta trasera y leer desde allí su tabla de base de datos y inicie sesión en su sitio web de una manera "legítima".
Además, puede haber otra fuente de intrusión, como una cookie comprometida, por ejemplo. Como consejo, siempre que elijas utilizar un marco (y te estás haciendo un favor mayor que si lo hicieras desde cero) tendrías que usar MÁS de sus características, especialmente cuando se trata de seguridad. Es una pregunta enorme y muy delicada, por lo que DEBE dar a este tema su máxima prioridad, y un marco bien desarrollado, con una gran comunidad y actualizaciones frecuentes es lo más cercano a la seguridad que puede obtener.
Por lo tanto, se le aconseja actualizar su instalación de CI (las guías se pueden encontrar here en su manual. Elija su versión y siga las instrucciones), siempre use las mejores herramientas que se le dan para cada tarea, y no piense que bloquear su puerta lo mantendrá a salvo de una intrusión desde sus ventanas. Siempre revise a fondo e investigue todas las posibles causas.
Adición tardía: No olvide XSS, CSRF, sesiones de fijación y otros problemas de seguridad.
use htmlentities después de real_escape_string y mejor haga datos en formato binario –
¿Cómo sabe que ha sido pirateado a través de SQL Injection? – Gumbo
Depende del ataque. Si el hacker obtuvo acceso no autorizado a una cuenta, es posible que escuche las quejas de la víctima, pero de lo contrario es posible que nunca lo sepa. Si el pirata informático alteró los contenidos de la base de datos o abandonó las tablas por completo, se dará cuenta de cuándo el sistema deja de funcionar. – Anton