JavaEE Online Employment Class 2.0 [Última versión actualizada]

descargar: JavaEE Online Employment Class 2.0 [Última versión actualizada]

inyección SQL

La inyección SQL es un comportamiento en el que el servidor no verifica estrictamente los datos enviados por el cliente y hace que la declaración SQL del servidor se corrija maliciosamente y se ejecute con éxito.

Esencia: Los datos ingresados ​​por el usuario se ejecutan como código. Cualquier centro que interactúe con la base de datos puede recibir inyección.


Transmisión de datos de tipo inyección SQL : GET POST COOKIE

Tipo de datos: tipo de carácter entero

Formulario de inyección: combinado con error de consulta, tiempo de inyección ciega booleana, consulta push de inyección ciega

Los pasos comunes de la inyección SQL son
determinar si hay
cambios en los parámetros controlables de la inyección que afectan los resultados de la página.
Si la instrucción SQL de entrada puede reportar un error. ----> Después de que la base de datos reporta un error, puede ver los rastros de la instrucción de la base de datos.
¿La declaración SQL de entrada no puede informar de un error? ----> La declaración se puede cerrar correctamente.
Para determinar
si la declaración del tipo de inyección se puede corregir con intenciones maliciosas,
si se puede ejecutar para
obtener los datos que queremos,
el conocimiento básico de la inyección SQL, la
construcción de la
base de datos de la base de datos ----> tabla ----> campo - -> valor

Después de la versión SQL5.0, MySQL accede a registrar una base de datos "information_schema" en la base de datos, en la que hay tres esquemas de nombres de tablas, tablas y columnas importantes.

La tabla de esquemas almacena los nombres de biblioteca de todas las bases de datos creadas por el usuario y el nombre del campo es nombre_esquema.

La tabla de tablas almacena el nombre de la base de datos y el nombre de la tabla de todas las bases de datos creadas por el usuario. Los campos de nombre de la base de datos y nombre de la tabla son table_schema y table_name respectivamente.

La tabla de columnas almacena todos los nombres de bibliotecas, tablas y campos. Sus nombres de campo son table_schema, table_name y column_name respectivamente.

Instrucción de consulta
seleccione el nombre del campo a consultar desde el nombre de la biblioteca. Nombre de la tabla
seleccione el nombre del campo a consultar desde el nombre de la biblioteca. Nombre de la tabla donde el nombre del campo de la condición conocida = 'valor de la condición conocida'
seleccione el nombre del campo a consultar desde el nombre de la biblioteca. nombre donde Condición conocida nombre de campo 1 = 'Valor de condición conocida 1' y Condición conocida 2 nombre de campo = 'Valor de condición conocida 2'
límite límite de uso
m, n
m indica la posición del comienzo del registro, Comenzando desde 0 significa el primero registro; n se refiere a n registros.

La
base de datos de funciones importantes () La base de datos utilizada por el sitio web actual.
version () La versión actual de MySQL.
user () El usuario actual de MySQL.
@@ datadir ruta de la base de datos.
@@ version_compile_os Caozuoxitong versión
concat (str1, str2, ...) sin la cadena delimitador del adaptador
concat_ws (separator, str1, str2, ...) que contiene el adaptador de cadena de caracteres delimitadores
group_concat (str1, str2, ...) Concatenar todo cadenas en un grupo y separe cada dato con una coma
.
Las expresiones de comentarios comunes son: # --espacio / ** /
en la URL como:% 23 - +

No se puede acceder al índice realizando operaciones de función en el campo de condición.

seleccione * de t1 donde fecha © = '2019-05-21';
optimización: cambio a la consulta de rango

seleccione * de t1 donde c> = '2019-05-21 00:00:00' yc <= '2019-05-21 23:59:59';
los
operadores de conversión implícitos se utilizan con diferentes tipos de objetos de operación En ese vez, se produce una conversión de tipo para que la operación sea compatible.

seleccione user_name, tele_phone de user_info donde tele_phone = 11111111111; / tele_phone varchar /
realizará operaciones de función en la práctica:

seleccione user_name, tele_phone from user_info donde emitir (tele_phone como int singed) = 11111111111;
Optimización: tipo unificado

seleccione user_name, tele_phone from user_info donde tele_phone = '11111111111'; comodín de
consulta vaga
al frente

seleccione * de t1 donde un me gusta '% 1111%';
optimización: consulta vaga debe incluir el valor delante del campo de condición

seleccione * de t1 donde un como '1111%';
El
volumen de datos de la consulta de rango de consulta de rango es demasiado, es necesario volver a la tabla, por lo que no hay índice.

seleccione * de t1 donde b> = 1 yb <= 2000;
Optimización: Reduzca el alcance de una sola consulta y divida la consulta en varias consultas. (La práctica puede no ser demasiado rápida, se recomienda tomar el índice)

seleccione de t1 donde b> = 1 yb <= 1000;
mostrar perfiles;
± --------- ± ----------- ± --------------------------- -------------- +
| Query_ID | Duración | Consulta |
± --------- ± ----------- ± --------------------------- -------------- +
| 1 | 0,00534775 | seleccione de t1 donde b> = 1 yb <= 1000 |
| 2 | 0,00605625 | seleccione * de t1 donde b> = 1 yb <= 2000 |
± --------- ± ----------- ± --------------------------- -------------- +
2 filas en conjunto, 1 advertencia (0.00 seg)
計算
操作 即便 是 简單 的 計算

explicar seleccionar * de t1 donde b-1 = 1000;
optimización: poner la operación de cálculo después del signo igual

explique select * from t1 donde b = 1000 + 1;

En MongoDB, la serialización y deserialización Json de OjbectId tipo saldrá mal, lo que se puede resolver de las siguientes dos formas

1. La forma más sencilla y grosera es restablecer una clave principal empresarial, como la clave, en cuyo caso el _id anterior no funcionará.

2. Utilice JsonConverter

ObjectIdConverter de clase pública: JsonConverter
{
public override bool CanConvert (Type objectType)
{
return objectType == typeof (ObjectId);
}

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType != JsonToken.String)
        {
            throw new Exception(
                String.Format(&quot;Unexpected token parsing ObjectId. Expected String, got {0}.&quot;,
                              reader.TokenType));
        }

        var value = (string)reader.Value;
        return String.IsNullOrEmpty(value) ? ObjectId.Empty : new ObjectId(value);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        if (value is ObjectId)
        {
            var objectId = (ObjectId)value;

            writer.WriteValue(objectId != ObjectId.Empty ? objectId.ToString() : String.Empty);
        }
        else
        {
            throw new Exception(&quot;Expected ObjectId value.&quot;);
        }
    }
}

Simplemente agregue una línea de código al campo ObjectId

[JsonConverter (typeof (ObjectIdConverter))]
public string _id {get; set;}
Si usa JsonConvert de Newtonsoft, debe agregar parámetros adicionales

JsonConvert.DeserializeObject <xxxx> (json, new ObjectIdConverter ());

3. A través de Ignore, una forma de escribir muy hábil

[JsonIgnore]
anulación pública ObjectId _Id {get; colocar; }

[BsonIgnore]
public string _IdStr
{
get
{
return Id.ToString ();
}
set
{
Id. de ObjectId;
ObjectId.TryParse (valor, id de salida);
Id = id;
}
}

Supongo que te gusta

Origin blog.51cto.com/15134651/2675776
Recomendado
Clasificación