1

disculpad si encontráis incongruencias en mis preguntas o afirmaciones, es solo que voy aprendiendo poco a poco y son datos que saco o leo en internet.

Ayer leí que la función GetSQLValueString es un método que usan las aplicaciones adobe (véase Dreamweaver) para escapar o evitar ataques inyección en sql, a esto añadir que no se si esta forma es fuerte o no y/o si sencillamente no es recomendable, porque también leí que no es muy recomendable el uso de funciones en php, el caso es que yo al maquetar con Dreamweaver tengo esta función en muchas páginas php, y como tal me están asaltando serias dudas a la hora de la realización de consultas preparadas de forma procedimental con mysqli, porque con la función de por medio no sé cómo continuar. Bueno bien, y esta es mi pregunta, ¿se pueden mezclar?, es decir, ¿tener GetSQLValueString y consultas preparadas?

Edito para exponer aclaraciones: Tengo esto en el top de la página.

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysqli_real_escape_string") ? mysqli_real_escape_string($theValue) : mysqli_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

y luego esto que creo que es (entrecomillo similar) a preparar una sentencia mysqli

    $hay_articulosql = sprintf("SELECT COUNT(*) from tblbasket WHERE idUsuario =%s and idProducto =%s",
    GetSQLValueString($_SESSION['MM_idUsuario'], "text"),
    GetSQLValueString($_GET['recordID'], "text"));

    $suma_articulosql=sprintf("UPDATE tblbasket SET intCantidad = intCantidad +1 WHERE idUsuario =%s and idProducto =%s",
    GetSQLValueString($_SESSION['MM_idUsuario'], "text"),
    GetSQLValueString($_GET['recordID'], "text"));                       

    $insertSQL = sprintf("INSERT INTO tblbasket (idUsuario, idProducto, intCantidad, dblPrecio) select %s, %s, 1, dblPrecio from tabla_productos  WHERE idProductos =%s",
     GetSQLValueString($_SESSION['MM_idUsuario'], "text"),
     GetSQLValueString($_GET['recordID'], "text"),
     GetSQLValueString($_GET['recordID'], "text"));

yo creo entender algo de lo que esta haciendo este codigo, y es darle los valores de tipo a cada parametro o declaración, (no se como se llama), ejemplo, idUsuario, idProducto, intCantidad etc con %s y luego la funcion con GET le dice si es int, text, etc.. A mi modo de entender es una vieja forma de hacer una sentencia preparada, primero se monta con ?, ?, ? y luego se resuelve con las variables $idUsuario etc etc... Entonces, ¿donde monto yo aqui una sentecia preparada if ($stmt = $link->prepare('SELECT etc etc ...?

David
  • 87
  • 10
  • 3
    Me parece un duplicado de: https://es.stackoverflow.com/questions/108520/la-inyecci%c3%b3n-sql-act%c3%baa-s%c3%b3lo-a-nivel-de-la-base-de-datos-o-el-riesgo-es-a%c3%ban-mayo – BetaM Nov 04 '19 at 17:19
  • 2
    GetSQLValueString es una funcion de php. ahora, viste la pregunta que esta a la derecha como relacionada? la leiste y entendiste? – gbianchi Nov 04 '19 at 17:21
  • 1
    @Aprendiz mas que duplicada, es un conjunto de esa + https://es.stackoverflow.com/q/18232/324 + https://es.stackoverflow.com/q/10518/324 – gbianchi Nov 04 '19 at 17:23
  • 1
    Aparecen a la derecha en relacionados ;) @Aprendiz – gbianchi Nov 04 '19 at 17:25
  • 1
    En fin. David todo eso no contesta tu pregunta? – gbianchi Nov 04 '19 at 17:29
  • 1
    Siempre ojeo los avisos de que podria estar formulada, en este caso lo hice pero no vi nada claro, será por el 2x1 :) Voy a leer esas que poneis. – David Nov 04 '19 at 17:32
  • 1
    bien, lamento deciros que no responde a mi pregunta ¿se pueden mezclar? cuanto mayor protencción mejor, si lo paso todo por un VPN al final mejor que mejor, pero ¿se pueden mezclar? – David Nov 04 '19 at 18:01
  • 1
    No queda claro ¿Que es lo que tratas de mezclar? – BetaM Nov 04 '19 at 18:12
  • Mezclar o tener en la misma pagina pero no mezcladas (cada una a parte) la funcion GetSQLValueString con luego las sentencias preparadas. Edito la pregunta para facilitar... – David Nov 04 '19 at 18:57
  • lee sobre como usar sentencias preparadas en los links. Si, podes mezclar. Esa funcion es propia de dreamweaver. **"HARIA"** lo mismo que escapar la cadena – gbianchi Nov 04 '19 at 19:28
  • Muchas gracias, ya uso sentencias preparadas en mis otras páginas, me encontré con esta y me asaltó la duda si se pueden conjuntar, (por evitar la palabra mezclar que será inapropiada). – David Nov 04 '19 at 19:42
  • Disculpad, una pregunta. Estos dos procesos conjuntos ¿No sobrecargaran el servidor con peticiones? Gracias. – David Nov 04 '19 at 21:37

0 Answers0