Código MySQL:
Ver original
Tambien estoy evitando la inyección SQL como en named parameters ?
Código MySQL:
Ver original
Muchas gracias por sus respuestas.
| ||||
PDO e inyección SQL Si yo tengo una consulta con PDO asi:
Código MySQL:
Ver original Tambien estoy evitando la inyección SQL como en named parameters ?
Código MySQL:
Ver original Muchas gracias por sus respuestas.
__________________ Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ??? |
| ||||
Respuesta: PDO e inyección SQL jeje muchas gracias por tu respuesta, imagínate que intente haciendo esto:
Código PHP:
Ver original Y no me dejo, me toco hacer esto:
Código PHP:
Ver original Según eso si evitaría la inyección SQL no ?
__________________ Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ??? |
| ||||
Respuesta: PDO e inyección SQL bueno, en el caso de fechas, PDO te exige un objeto fecha (lógico es orientado a objetos), pero en el caso de cadenas si las escapa, eso quiere decir que PDO restringe por tipos, eso es muy apreciado en el caso de seguridad
__________________ ¡Por favor!: usa el highlight para mostrar código El que busca, encuentra... |
| ||||
Respuesta: PDO e inyección SQL Lo que pasa es que al usar ? como placeholder, PDO lo escapa y tu consulta queda así:
Código SQL:
Ver original Tienes que entender que la idea de usar prepared statements, no es solamente la de escapar los carácteres, si no más bien lo que hace internamente PDO es mandar el query a tu BDD, compilar el query y luego esperar los valores de entrada. Es por eso que no se pueden poner funciones como NOW() ya que no hay optimización, en ese caso ponlo directamente en tu query:
Código SQL:
Ver original La idea de usar prepared statements es de usarlos cuando necesites enviar variables de entrada o salida y tener la mayor optimización posible. Saludos. |
| ||||
Respuesta: PDO e inyección SQL Muchas gracias por responder GatorV, pero volviendo a la pregunta inicial con cualquiera de las dos formas PDO me evita inyecciones SQL? Es que estube buscando y encontre en el foro un tema viejo pero se utiliza "named parameters", mi pregunta concreta es si utilizando "positional parameters" PDO también me evita inyección SQL ?
__________________ Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ??? |
| ||||
Respuesta: PDO e inyección SQL El que uses named parameters (:name) o placeholders (?) es lo mismo, debes de entender como funcionan los prepared statements para que veas como es que te protegen de los SQL Inyections. Cuando tu mandas un query, por ejemplo SELECT * FROM foo WHERE bar = ?, este query como tal, literal se envía a MySQL (con todo y el ?), el motor de MySQL analiza el query, y ve el placeholder y dice "ok espero una variable de entrada", entonces ejecuta el query y lo deja en un estado compilado, luego PDO al hacer el execute, le dice del query que te envié, estos son los parámetros, y entonces hace la ejecución del Query. Esto hace que sea imposible que te hagan SQL Inyection, ya que el SQL no existe, ya se volvió código nativo para la base de datos que solo espera variables de entrada, las cuales por más SQL que pongan no tiene efecto ya que son variables. Si entiendes esto, puedes ver la razón de porque usando ? o :name es lo mismo, y realmente solo es a tu gusto como programador el usar cualquiera de las dos. También viendo esto puedes ver el porque no se puede usar el NOW() como variable, y se tiene que construir directamente en el query. También puedes ver con esto porque no se puede hacer algo así: SELECT * FROM ? WHERE ? = ?, ya que MySQL analiza y prepara el Query y no soporta variables en esas posiciones, solo en las variables de entrada. Saludos. |
| ||||
Respuesta: PDO e inyección SQL O.o ahora si entendí, ahora se como funciona, es una excelente respuesta.... Como siempre GatorV te sobraste con esa explicación. Si PDO hace todo eso para evitar la inyección, entonces para que utilizar bindParam ? Es que leo y leo y busco y busco y no dicen la funcion real de bindParam Muchísimas gracias.
__________________ Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ??? |
| ||||
Respuesta: PDO e inyección SQL No es que lo haga PDO, de hecho es un trabajo del RDBMS, aunque PDO trae una capa que emula los prepared statements si es que el RDBMS no soporta eso. bindParam, sirve para enlazar una variable (por referencia) hacía un prepared statement, te permite hacer cosas así:
Código PHP:
Ver original O sea la variable queda enlazada por referencia, y sirve para poder también usar variables de entrada y salida en los stored procedures. Un ejemplo del manual:
Código PHP:
Ver original Los prepared statements son muy usados sobre todo cuando tienes que hacer muchos inserts (en modo batch) ya que tienen el mejor rendimiento vs usar sql queries normales. Saludos. |
| ||||
Respuesta: PDO e inyección SQL Perfecto, queda completamente aclarada mi duda. Nuevamente muchísimas gracias por la explicación.
__________________ Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ??? |
Etiquetas: |