Random ramblings about web2py, python,
Zope and (sometimes) bit of Windows.
Inicio | web2py | ¿Quién Soy? | Envíame un Mensaje | Language English |   

Últimos 10
Bitácoras Anteriores
Enlaces Externos

Agregar Comentario

Con el afán de mantener éste sitio abierto para todo mundo, por favor evita aquellos comentarios impropios, vulgares o que de plano no vengan al caso.

Verifica tu humanidad [88695] Introducir el número mostrado
Nombre o Email (OPCIONAL - Nombres o emails no serán usados para ningún propósito)
Message

(Solo parte del código HTML es permitido)

Post Original:

De cualquier manera, aún no puedo acostumbrarme a la verbosidad de C#, ésto aunado a la necesidad de definir los tipos de cada objeto de manera explícita (i.e. string sStr = String.Empty; la cuál no me malinterpreten, no considero que sea nada malo (Después de todo explícito es mucho mejor que implícito en programación ¿no?), ayuda a que sea en cierta medida más complejo y a mi parecer un poco menos eficiente. Si, el microsoftero me dirá - "..Para eso existen las librerias reusables.." - pero a fin de cuentas ese código deberá de ser escrito alguna vez.

Para ilustrar my punto, consideren el siguiente fragmento, que extrae la información del usuario con ID "OID" de una base de datos SQL:

using System.Data.SqlClient; public static DataSet GetUser(int iOID) { string strSQLConnection = "[Definición de conectividad para tu base de datos]"; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); string strSQL = "select * from Users where OID = @OID"; sqlConnection sqlConnection = new SqlConnection(strSQLConnection); SqlCommand sqlCommand = new SqlCommand(strSQL, sqlConnection); sqlConnection.Open(); sqlCommand.CommandType = CommandType.Text; sqlCommand.Parameters.Add("@OID", SqlDbType.Int).Value = iOID; da.SelectCommand = sqlCommand; da.fill(ds); sqlConnection.Close(); return ds; }

Ahora tenemos la contraparte en python (Usando MySQL):

import MySQLdb def get_user(oid): conn = MySQLdb.connect([Definición de conectividad para tu base de datos]) cursor = conn.cursor() cursor.execute("select * from Users where OID = %s" % (oid)) row = cursor.fetchone() cursor.close() conn.close() return row

Ahora, me podrás decir que que pasa cuando el parámetro "oid" es por ejemplo: 100; delete from Users (Inyección de SQL), ilustrado de la manera más cómica en XKCD:

Exploits of a Mom

En éste caso, la grán diferencia es que el método MySQLdb.execute() toma en cuanta éste tipo de intentos y genera un error (que no es atrapado en el código de prueba arriba).


 

TechFuel.net | Estándares xhtml 1.1 y css 2.1 | Rel 16