Random ramblings about web2py, python,
Zope and (sometimes) bit of Windows.
Home | web2py | Who am I? | Contact Me | Lenguaje: Espanol |   

Last 10
Older Posts
External Links

Add a Comment

Please keep this blog clean, avoid inflamatory, vulgar or otherwise improper comments. Thanks!

Verify your humanity [42857] Please type in the number shown
Name or Email (OPTIONAL - Names or emails will not be used for any other purpose than contacting the sender)
Message

(Some safe-HTML code is allowed only)

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 | Web Standards xhtml 1.1 and css 2.1 | Rel 16