visual una net mid left instr funciones funcion extraer example ejemplos ejemplo caracteres cadena vb6

vb6 - una - substring visual basic



Fugas de comillas en una cadena en VB6 (7)

Estoy tratando de hacer algunos pequeños cambios en una antigua aplicación web de VB. Necesito agregar citas dentro de una cadena que no he tenido suerte hasta ahora. La cadena es

Dim sql As String = "Select * from Usertask Where UserId = " & Session("UserId") & " and JobID=" & ddlReqTask.SelectedValue

Necesito agregar citas en torno al valor de Sesión ("UserID").


Es como esto..

dim user_id as string="SomePerson" debug.print "UserId=" & chr(34) & user_id & Chr(34)

produce ..

UserID="SomePerson"


Esta es una vulnerabilidad de inyección SQL y NO debe estar haciéndolo. Al hacerlo de esta manera, permite que sus usuarios ejecuten cualquier consulta que quieran al proporcionarle un UserId como

''; DROP TABLE Usertask; --

En su lugar, utilice parámetros. Dependiendo de cómo esté ejecutando el SQL, hay diferentes maneras de hacerlo; Por favor, muéstrenos el código que ejecuta la consulta SQL.

En respuesta a tu pregunta,

Dim StringWithQuotes As String = "Hello, I''ve got ""Quotes""!"

Esta cadena sera

Hola, tengo "Cotizaciones"!


La mayoría de los servidores SQL, en mi experiencia, necesitan una comilla simple para cadenas. La mejor manera de hacerlo es dejar que .net deside por usted, utilizando los parámetros de SQL. Aquí hay una muestra (también en VB.Net): http://www.knowdotnet.com/articles/dynamicsqlparameters.html
Esto también tiene el beneficio de la seguridad contra las inyecciones de SQL.


Le recomendaría que utilice un SQL parametrizado en lugar de crear una declaración de SQL adhoc como esta, ya que podría dejarse abierto a la inyección de SQL. Esto significa que no tiene que preocuparse por concatenar citas en la cadena, sino también por mejorar el rendimiento de las consultas (asumiendo que el servidor SQL) ya que permite el almacenamiento en caché del plan de ejecución y la reutilización.

p.ej

Dim sql As String = "Select * from Usertask Where UserId = ? AND JobID = ?"

Luego agregue 2 parámetros de ADODB al objeto de Comando para suministrar los valores para los 2 parámetros, por ejemplo

Set param = New ADODB.Parameter param.Name = "@UserId" param.Direction = adParamInput param.Type = adVarChar param.Size = (give size of user id field) param.value = Session("UserId") yourADOCommand.Parameters.Append param

Y lo mismo otra vez para el parámetro JobId.


Para escapar de una cita, solo necesita agregar otra, creo que esto es lo que necesita:

Dim sql As String = "Select * from Usertask Where UserId = """ & Session("UserId") & """ and JobID=" & ddlReqTask.SelectedValue


Puede usar "" para insertar una cita en una cadena, por ejemplo:

dim sometext as String = "Hello ""Frank"" how are you?"

Lo que te da

Hola "frank" como estas


También puedes usar Chr(34) en la concatentación.

Dim sql As String = "Select * from Usertask Where UserId = " & Chr(34) & Replace(Session("UserId"), Chr(34), Chr(34) & Chr(34)) & Chr(34) & " and JobID=" & CLng(ddlReqTask.SelectedValue)

De cualquier manera funciona (los otros ejemplos y este). algunas personas prefieren este, ya que puede ser menos confuso, sin embargo, los ejemplos anteriores no son perfectamente hábiles y no están muy avanzados.