Действительно ли mysqli классифицирует в PHP, защищают 100% от внедрений SQL?

Согласно функция, предоставленная здесь @Parsa T

import pandas as pd

data = [{'id': 1, 'name': {'first': 'Coleen', 'last': 'Volk', 'nickname': 'Perico'}},
    {'id': 2, 'name': {'first': 'Mose', 'last': 'Regner', 'nickname': 'Palotes'}}]

df = pd.io.json.json_normalize(data)
#some transormations using Pandas
df = df.drop(columns=['name.nickname'])





def set_for_keys(my_dict, key_arr, val):
    """
    Set val at path in my_dict defined by the string (or serializable object) array key_arr
    """
    current = my_dict
    for i in range(len(key_arr)):
        key = key_arr[i]
        if key not in current:
            if i==len(key_arr)-1:
                current[key] = val
            else:
                current[key] = {}
        else:
            if type(current[key]) is not dict:
                print("Given dictionary is not compatible with key structure requested")
                raise ValueError("Dictionary key already occupied")

        current = current[key]

    return my_dict

def to_formatted_json(df, sep="."):
    result = []
    for _, row in df.iterrows():
        parsed_row = {}
        for idx, val in row.iteritems():
            keys = idx.split(sep)
            parsed_row = set_for_keys(parsed_row, keys, val)

        result.append(parsed_row)
    return result


#Where df was parsed from json-dict using json_normalize
to_formatted_json(df, sep=".")

Выход:

Out[9]: 
[{'id': 1, 'name': {'first': 'Coleen', 'last': 'Volk'}},
 {'id': 2, 'name': {'first': 'Mose', 'last': 'Regner'}}]

5
задан Marius 3 March 2009 в 12:08
поделиться

2 ответа

Но действительно ли это надежно, или является там все еще некоторым способом обойти его.

Нет, необходимо знать то, что Вы делаете. При использовании связанных параметров (Функция, с которой MySqli идет), Вы абсолютно в безопасности от инжекционных атак типа от этого вектора атаки. Это не предотвращает Вас - программиста - от встраивания строк непосредственно и таким образом нападений инжекции включения. Необходимо использовать функцию, как предназначено.

Ре:Править

Что я должен был сказать, для начала то, что я использую подготовленные операторы. Именно это я имел в виду с mysqli. Если я использую подготовленные операторы без какой-либо конкатенации строк, то действительно ли это является надежным?

Надежный все еще такое опасное слово. Но Вы в безопасности от инжекционных нападений для переменных, которые связываются через подготовленные операторы. Это вызвано тем, что связанные параметры передаются отдельно от SQL-запроса. С "традиционным" подходом встраивать-строки сервер базы данных должен проанализировать вход и существует много пограничных случаев в том (Наборы символов и т.д.). Когда данные и запрос отправляются отдельные, нет никакого фактического продолжения парсинга (По крайней мере, не парсинг переменных данных).

15
ответ дан 18 December 2019 в 12:02
поделиться

Это не защищает от внедрений SQL немного лучше, чем старый mysql модуль, просто делает выполнение его легче для разработчика, который может теперь использовать подготовленные операторы вместо того, чтобы назвать mysql_real_escape_string.

0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: