Экранирование типов данных SQL в инструкции CREATE TABLE



Краткая справка : Мы создаем конструктор форм для нашего веб-приложения. Цель конструктора-позволить нашим администраторам быстро добавлять / изменять формы на нашей странице. Чтобы гарантировать, что данные, собранные этими формами, легко доступны для поиска отчетов, мы решили, что приложение создаст таблицу для каждой формы, которая содержит входные данные пользователя.



Осознавая безопасность, все наши имена таблиц и столбцов должным образом экранируются и окружаются при правильном цитат (кавычки ` для MySQL). Однако я не знаю никакого экранирования или цитирования для типов данных в инструкции CREATE. Мы хотим, чтобы различные типы данных учитывались для лучшего индексирования и поиска, что означает, что они динамически определяются при создании/изменении формы.



Текущий маршрут , который мы берем, состоит в том, чтобы внести в белый список возможные типы данных, которые мы поддерживаем, и заставить любой дополнительный размер ввода быть числом. Таким образом, любой вредоносный код невозможно создать столбец BLOB, и передача размера для VARCHAR "128); DROP DATABASE;" будет превращена либо в 128, либо в 0 (я сейчас забыл, как PHP обрабатывает преобразование строк в числа).



Я хотел получить некоторую обратную связь, как вы думаете, это адекватная защита? Есть ли какой-то способ написать SQL, который защитил бы нас, подобно окружению имени таблицы в соответствующих кавычках?



Кроме того, есть ли у кого-нибудь представление о том, какие опасности существуют с типом данных размеры? я ожидаю потенциально проблемы с поглощением большого пространства, но ничего с безопасностью.

592   2  

2 ответов:

Мне все это кажется хорошим, только не забывайте, что десятичный тип требовал двух входов, масштаба и точности.

Я вижу, что вы используете PHP, почему бы вам просто не санировать ваши пользовательские входы с помощью фильтров очистки и не делать все остальное по-своему! Дайте нам знать, если это работает хорошо для вас? Функции PHP, которые вы ищете, это FILTER_SANITIZE_STRING или другие, подобные этому. Вы можете просмотреть их здесь http://php.net/manual/en/filter.filters.sanitize.php

Comments

    Ничего не найдено.