Что случается, когда нет controllable query
user
The maximum total length of a user name is 64 characters.
domain
The maximum total length of a domain name or number is 64
characters.
То, что емейл может быть не только больше 129, а больше 255 символов, и при этом пролезет через почтовики - ну упс.
Суть проблемызачет!
Так вот зачем пишут тесты на геттеры и сеттеры!
Эпик, конечно, но ни БД ни запросы тут не причем. Баг явно чуть раньше доступа к БД.
Баг в том, что представление в памяти программы не соответствует представлению в базе данных. Каждый из них может заявлять, что проблема на другой стороне, а у него всё в порядке. И вот для этого и нужен controllable query, чтобы несовместимые представления при попытках сочленения выдавали ошибку статической типизации.
Сейчас: регистрация -> запись в базу и посылка почты
Надо: регистрация -> запись в базу -> извлечение из базы и посылка почты
А еще лучше сделать проверку во время ввода на сайте.
Никто не спорит, что можно написать софт корректно, привести к общему знаменателю, или делать двойную конвертацию туда-обратно, чтобы уравнивать представления. Суть в том, что такой подход может рождать ошибки, как мы видим в данном случае. А статическая типизация не даёт делать таких ошибок вовсе.
Надо: регистрация -> запись в базу -> извлечение из базы и посылка почтыНеобходимость в этом стала известна только постфактум. Только после того как стало известно, что между данными в коде и данными в бд возможно расхождение.
А еще лучше сделать проверку во время ввода на сайте.
forum.........@hq.sectorb.msk.ru.site.com , то админские права автоматом дадут?
А если на форуме зарегать юзера с емэйла
Необходимость в проверке очевидна сразу, поскольку "переполнение буфера" (условно в данном случае) одна из самых распространенных ошибок в мире.
А статическая типизация не даёт делать таких ошибок вовсе.Еще она работать не дает, особенно с базой данных.
Еще она работать не дает, особенно с базой данных.Верно, что "некоторые частные реализации статической типизации не дают работать с БД", но неверен тезис "что всякая статическая типизация не дает работает с БД"
"Нормальные герои всегда идут в обход".
В обход идти, понятно, не очень-то легко,
не очень-то приятно и очень далеко...
Проблема в идиотском mysql
где это можно решить либо средствами самого HTML, либо средствами javascript!Нет, нельзя. man curl.
А откуда html знает ограничения БД? Что если перейдут на другую БД или на другой компонент html?
самый тривиальный элемент ввода самого обычного HTML позволяет установить ограничение на количество вводимых символовЗлоумышленник может отправлять http запросы в обход html страниц
Ок. Был не прав.
Ты исходишь из того, что определение ограничения на максимальную длину почты делается тривиальным образом. Это не так. Поставишь слишком маленькое - потеряешь пользователей, поставишь слишком большое - получишь buffer overflow на каком-либо компоненте.
Ты исходишь из того, что определение ограничения на максимальную длину почты делается тривиальным образом. Это не так. Поставишь слишком маленькое - потеряешь пользователей, поставишь слишком большое - получишь buffer overflow на каком-либо компоненте.А зачем ограничение ставить?
Бобровников предлагал решать проблему именно так. Принять ограничения БД как данность и подстроить программный компонент
С другой стороны, отсутствие ограничений приводит к DOS-у. Email длиной 2ГБ от одного пользователя положит скорее всего систему целиком.
Насколько я помню, самый тривиальный элемент ввода самого обычного HTML позволяет установить ограничение на количество вводимых символов.Я буду матом ругаться. НИКАКАЯ ФИЛЬТРАЦИЯ НА СТОРОНЕ КЛИЕНТА НЕ РАБОТАЕТ НИ ДЛЯ КОГО КРОМЕ ШКОЛЬНИКОВ. И то не всех. Распечатай и повесь на стену.
Проблема в идиотском mysqlПравда что-ли? Mysql умеет ошибку при переполнении слать, это какой-то умелец strict mode отключил на таблице с емейлами.
Само наличие такой настройки это глупость.
Само существование C, где можно выйти за пределы массива, переполнить число и обратиться по произвольному адресу - это глупость ;-). Но работает быстро обычно.
Баг в том, что представление в памяти программы не соответствует представлению в базе данных.это технический баг
а вот использовать пользовательский емейл, чтобы раздавать права - это уже архитектурная дыра
ну это концепция единого аккаунта. Видимо, строили что-то наподобие домена.
Т.е. им остальные сайты тоже сломать так можно?
Само существование C, где можно выйти за пределы массива, переполнить число и обратиться по произвольному адресу - это глупость ;-). Но работает быстро обычно.аналогия неуместна
да массивы в С работают быстрее
а СУБД по производительности пофиг, обрезать ли строку, или выдавать ошибку: что так что так длину проверять придётся
а нестрогий режим наверняка оставили для совместимости с древними версиями mysql, в которых строгого не было
http://dev.mysql.com/doc/refman/5.0/en/faqs-sql-modes.html#...
A.3.6: Does strict mode impact performance?
The intensive validation of input data that some settings requires more time than if the validation is not done. While the performance impact is not that great, if you do not require such validation (perhaps your application already handles all of this), then MySQL gives you the option of leaving strict mode disabled. However—if you do require it—strict mode can provide such validation.
Основной язык для работы с базами данных SQL.А статическая типизация не даёт делать таких ошибок вовсе.
Еще она работать не дает, особенно с базой данных.
SQL является статически типизированным языком, внезапно.
SQL является статически типизированным языком, внезапно.С чего вдруг. Даже базу можно удалить, а потом создать новую с произвольными колонками.
А ты не смешивай DDL и DML.
С чего вдруг.http://en.wikipedia.org/wiki/SQL
Typing discipline Static, strong
Даже базу можно удалить, а потом создать новую с произвольными колонками.
На C# тоже можно в рантайме создать типы с произвольными колонками и их экземпляры.
Стандарт не содержит требования статической проверки типов, да это и не возможно из-за того, что нет необходимости их явно объявлять, есть каст, есть нулл. Более того, в стандарте явно описываются дескрипторы типов, которые есть явный признак динамического языка.
Ну и вообще, спор о самом SQL бессмысленнен, потому что никакой строгой типизации в реальных базах данных нет. Поменяешь таблицу - могут потом упасть и процедуры базы и клиенты со старыми кверями.
Стандарт не содержит требования статической проверки типов, да это и не возможно из-за того, что нет необходимости их явно объявлятьЕсли колонку не объявить, SQL запрос не пройдет статическую проверку.
есть каст,
Каксты есть в статических языках. К чему ты это написал?
Более того, в стандарте явно описываются дескрипторы типов, которые есть явный признак динамического языка.
В C# есть dynamic, есть рефлекшен, и что? В языках смешиваются статическая и динамическая типизация, это давно не новость. Тем не менее, базовая часть SQL статически типизированная. Надежно работают find usages и рефакторинг.
Ну и вообще, спор о самом SQL бессмысленнен, потому что никакой строгой типизации в реальных базах данных нет. Поменяешь таблицу - могут потом упасть и процедуры базы и клиенты со старыми кверями.В SQL Server есть dm_sql_referenced_entities. Можно посмотреть в каких процедурах используется эта таблица. Меняешь таблицу, меняешь эти процедуры.
Есть SQL Server Data Tools, в котором есть авторефакторинг. Есть несколько сторонних продуктов для авторефакторинга.
... и клиенты со старыми кверями.На клиентах кто-то использует LINQ, кто-то Controllable Query.
Поменяешь таблицу - могут потом упасть и процедуры базы и клиенты со старыми кверями.В .net-е если поменяешь одну assembly, то упадет всё остальное. В C/C++ если объявления будут разными в разных единицах трансляции, то всё соберется, но работать не будет.
Эти примеры показывают, что статическая типизация работает внутри отдельных контекстов - единиц трансляции. В Sql-е единицы трансляции очень маленькие: запрос, stored procedure, таблица.
В Sql-е единицы трансляции очень маленькие: запрос, stored procedure, таблица.dm_sql_referenced_entities работает по всей базе.
Это не отменяет моего мнения, что Sql стоит сжечь в аду. Sql родом из 70-ых и там же остался по своему удобству.
Sql родом из 70-ых и там же остался по своему удобству.Открой для себя продукты dbforge, SQL становится удобным.
P.S. И проверенный временем.
Ну и то что для интроспекции объектов в SQL используется сам SQL, это прикольно. Можно например рекурсивным SQL запросом вывести список вьюх, которые транзитивно зависят от какой-то вьюхи.
В принципе, следовало бы ко всяким решарперам приделать язык запросов.
В принципе, следовало бы ко всяким решарперам приделать язык запросов.Roslyn
Это не отменяет моего мнения, что Sql стоит сжечь в аду. Sql родом из 70-ых и там же остался по своему удобству.SQL - это логическое программирование. Все прикладное программирование должно быть логическим. Сейчас для прикладного программирования используют низкоуровневые языки, такие как, например, javascript и C#. Эти языки используют такие низкоуровненые понятия, как, например, указатели (ссылки), массивы, хэш-таблицы. Кроме того, в них есть контекст выполнения, и связанные с ним ужасы, такие как пошаговый отладчик.
В 70-е годы понимали, что высокоуровневое программирование надо очистить от этого ассемблерного говна, поэтому изобрели SQL. К сожалению, сейчас крупные компании, которые должны заниматься разработкой средств разработки для прикладного программирования, находятся в состоянии полной импотенции, кроме, отчасти, фейсбука.
Так что на данный момент выбор такой - либо использовать высокоуровневый SQL родом из 70-x, либо использовать низкоуровневые ассемблеры из 90-x - 2000-x
Эти языки используют такие низкоуровненые понятия, как, например, указатели (ссылки), массивы, хэш-таблицы.Чем указатель отличается от курсора? Чем массив отличается от таблицы в БД? Чем хэш-таблица в коде отличается от хэш-таблицы в БД?
Инструменты работы с данными и там, и там одинаковые.
Основное отличие sql-я от универсальных языков в том, что sql из коробки поддерживает преобразование выражения из формы удобной для записи в форму оптимальную для выполнения.
ps
Классически, Sql.Dml относят к декларативным языкам, а к не логическим. Логические - это пролог. В них есть из коробки - выведение новых утверждений на основе исходных.
http://en.wikipedia.org/wiki/Data_manipulation_language
полной импотенции, кроме, отчасти, фейсбукаЭто ты про пхп на костылях или про реакт, от которого фанатеют фронтендщики, до того ни разу не видевшие приличного mvvm фреймворка вроде WPF?
приличного mvvm фреймворка вроде WPF?Запости полный код для сложения двух чисел, а мы поржем. Два текстовых поля, если в поля введены два целых числа, то рядом вывести их сумм.
Основное отличие sql-я от универсальных языков в том, что sql из коробки поддерживает преобразование выражения из формы удобной для записи в форму оптимальную для выполнения.Главное отличие sql - это представление данных в альтернативной форме, не так как в обычных языках. Оптимальное выполнение - это уже ересь, можно выполнение и в явно задавать порядком выражений.
22.2 WHAT MAKES A DATABASE COMPUTATION MODEL
POWERFUL?
I claim that the power of relational algebra as an abstraction of disk storage
comes from its encapsulation of iteration. Seven or eight common forms of
iteration over sets of records are itified, and queries are expressed in terms
of them. Since there are a small number of forms, their interactions can be
studied in detail, giving rise to transformations that can be used for optimizing
queries. Effort can be directed at efficient implementation of this handful
of iteration forms. Since the iteration is expressed at a high level, multiple
orderings for accessing records are permissible, and the physical ordering or
records and foreknowledge of access patterns can be used to great advantage.
Further, use of auxiliary access structures can be embedded in the evaluation
methods for the algebraic operators, making applications indepent of the
presence or absence of such structures, and simplifying that code. A query
processor can delay choosing a particular evaluation plan for an algebraic
expression until the sizes of the arguments are known, allowing even more
efficiencies in execution. None of these advantages is available when database
manipulations are expressed with explicit looping structures. Looping gives a
particular implementation of the query, from which it is nearly impossible to
infer the intent. Thus, the range of transformations and evaluation choices is
severely limited. Moreover, the record-at-a-time nature of explicit iterations
places high demands on the communication bandwidth between application
programs and the database system.
I expect the next generation of database systems to reside on a network
of workstations, with a central or distributed storage manager, shared by
application programs over the network. Here, the importance of being able
to express iterations and other data-intensive operations succinctly is even
greater. Whatever the database programming model, it must allow complex,
data-intensive operations to be picked out of programs for execution by the
storage manager, rather than forcing a record or object-at-a-time interface.
Что такое "представление данных в альтернативной форме"?
Читаем классику 80 годов:Давай еще 60-е вспомним. Да, было преимущество когда-то, а сейчас его нет.
Looping gives aВот только есть одна проблема, конкретная имплементация человеком обычно одна из лучших возможных, а вот что там навыводит автоматический скедулер это еще вопрос. На практике, вокруг базы ходят с шаманским бубном и без спеца не обойдешься.
particular implementation of the query, from which it is nearly impossible to
infer the intent.
И в общем-то достаточно вспомнить, что в sql нет явного порядка записей, что на корню убивает перформанс любых задач с порядком.
Что такое "представление данных в альтернативной форме"?Например ООП учит думать в терминах объектов - инкапсуляция, то-се. Функциональное программирование учит решать задачи не полагаясь на состояние (недавно писал в ООП так меня колбасило от императивщины). SQL - это еще один подход к организации данных.
SQL - это еще один подход к организации данных.В чем суть такой организации данных?
Есть ли что-то еще кроме альтернативной организации данных? Или другими словами, если в универсальном языке реализовать такую же организацию данных как в реляционной БД, то получится ли Sql-подход?
...человеком обычно одна из лучших возможных ...Напиши название системы управления данными, про которую ты написал эту фразу.
И в общем-то достаточно вспомнить, что в sql нет явного порядка записей, что на корню убивает перформанс любых задач с порядком.Бред какой-то. В том же хештейбле нет порядка как раз по причине перфоманса.
На практике, вокруг базы ходят с шаманским бубном и без спеца не обойдешься.
Это Oracle специально разводит "спецов" вокруг базы. У этой компании такая маркетинговая стратегия. Такие законы рынка.
С SQL Server могут самостоятельно работать full-stack программисты.
Давай еще 60-е вспомним. Да, было преимущество когда-то, а сейчас его нет.А что изменилось, что нового появилось? Называй уже о каких системах управления данными ты говоришь.
PHP появился
Бред какой-то. В том же хештейбле нет порядка как раз по причине перфоманса.Бред у тебя в штанах. А реальные данные обычно организованы или по времени или пространственно и с sql с ними работать сложно. Достаточно почитать книгу, где извращенцы реализуют на sql списки, деревья и т.п.
Есть ли что-то еще кроме альтернативной организации данных? Или другими словами, если в универсальном языке реализовать такую же организацию данных как в реляционной БД, то получится ли Sql-подход?Основные операции над данными также отличаются. Они близки к векторным, которые заметно другие по сравнению с императивной модификацией значений или функциональными преобразованиями.
Если такие векторные(групповые) операции реализовать в коде, то достаточно ли этого будет для построения sql-подхода на основе универсального ЯП?
да
А реальные данные обычно организованы или по времени или пространственно и с sql с ними работать сложно. Достаточно почитать книгу, где извращенцы реализуют на sql списки, деревья и т.п.Реальные данные в большинстве компаний находятся под управлением RDBMS.
Достаточно почитать книгу, где извращенцы реализуют на sql списки, деревья и т.п.А так, да, извращенцев много, даже key-value хранилище нередко делают на RDBMS. Тот же Майк впарил Связному такую систему.
Как быть с тем, что в Sql-е есть возможность добавить индекс и ускорить выполнения кода без переписывания кода? а в ЯП такого из коробки нет?
Как быть с тем, что в Sql-е есть возможность добавить индекс и ускорить выполнения кода без переписывания кода? а в ЯП такого из коробки нет?Во-первых, есть языки, где есть такая возможность. Во-вторых, в ЯП можно использовать не только индекс, но и сортировку и предварительное группирование и другие методы ускорения доступа.
Во-первых, есть языки, где есть такая возможность.Например?
Например?Типичный слив в разделе девелопмент: "это можно делать лучше, но я не покажу как".
Это Oracle специально разводит "спецов" вокруг базы. У этой компании такая маркетинговая стратегия. Такие законы рынка.DBA с разработчиками случаем не путаешь?
С SQL Server могут самостоятельно работать full-stack программисты.
На вскидку даже вспомнить не могу ни одной РСУБД, для разработки на которой требуются такого уровня специалисты.
А вот для грамотного администрирования поголовно, и MSSQL тут не исключение.
P.S. Если чё я в теме: у меня сертификат DBA по DB2 9.7 и сдан экзамен по Oracle 11g «SQL Fundamentals» (только не спрашивайте зачем :-D).
Для администрирования MSSQL достаточно общего системного администратора (бекапы настроить и т.п.). Остальное делают full-stack разработчики.
Что делает DBA?Да, это дармоеды, просто! Они только тем и занимаются, что мешают разрабам - вечно базу замедляют, вечно что-то переконфигурируют - один вред от них.
У full-stack разработчика больше знаний о предметной области, о технических деталях системы и больше средств для повышения быстродействия базы.
Если только у сферического в вакууме full stack разработчика
Так и напрашивается: «Тыжпрограммист!».
Разумеется, все эти настройки зависят от того, что будет крутиться в базе. Однако, разработчик в 90% случаев о деталях может вообще не догадываться.
Как на счет организации размещения datafiles, организации tablespaceов, организации redologs и прочих shared poolов, настройки которых могут радикально влиять на производительность?Разумеется, все эти настройки зависят от того, что будет крутиться в базе. Однако, разработчик в 90% случаев о деталях может вообще не догадываться.Хороший разработчик должен знать, что может радикально влиять на производительность, если он этого не знает, то стоит узнать.
А так да, бывает, в этом разделе один известный персонаж писал, что обращение к базе это 300ms.
Хороший разработчик должен знать, что может радикально влиять на производительность, если он этого не знает, то стоит узнать.В моей вселенной программисты зачастую даже среду разработки не в состоянии сами себе установить и настроить, а ты говоришь о тонкой настройке СУБД.
Даже если разработчики толковые, всё равно в большой команде обязательно есть кто-то с компетенцией DBA. И только в маленьких проектах не привлекают DBA, а полагаются на собственные знания разработчиков.
Абстракции текут. Абстракции БД - тоже. На весь проект нужен хотя бы один разработчик, который разбирается во всех слоях и может заткнуть утечки.
Хороший разработчик должен знатьТакое заклинание можно к чему угодно применять не ограничивая себя в фантазии. На практике же разработчик просто отвлекается от разработки, когда начинает выяснять вещи напрямую его не касающиеся, которые должен выполнять специалист другой квалификации.
Такое заклинание можно к чему угодно применять не ограничивая себя в фантазии. ... выяснять вещи напрямую его не касающиеся, которые должен выполнять специалист другой квалификации.Твоё высказывание самоприменимо.
На практике же разработчик просто отвлекается от разработки, когда начинаетБобровников о "практике" разработчика.
Бобровников о "практике" разработчика.Крайний аргумент использован - box checked!
На весь проект нужен хотя бы один разработчик, который разбирается во всех слоях
Архитектор, ГИП, технический лидер, но это всё не то - они все всё равно всё не знают (надо больше слов все/всё в одном предложении!).
и может заткнуть утечки.
Обычно это всё же разные люди, а не один. А этот один разве что знает к кому обратиться по тому или иному вопросу.
P.S. Во многих проектах именно таким человеком и являюсь, и меня часто привлекают к другим проектам в качестве консультанта по таким вопросам - далеко не всегда получается обойтись без специалистов в специфических областях.
если это разные люди, то спланировать проект будет им очень сложно.
Только в том случае, когда они друг другу не доверяют или сомневаются в компетенции.
Только в том случае, когда они друг другу не доверяют или сомневаются в компетенции.Когда не все в доле?
Что делает DBA?я уж не знаю как у вас в MSSQL, может быть там рай на земле
Для администрирования MSSQL достаточно общего системного администратора (бекапы настроить и т.п.). Остальное делают full-stack разработчики.
между прочим существует промежуточная между DBA и full-stack developer профессия: разработчик баз данных
я уж не знаю как у вас в MSSQL, может быть там рай на землеЧем больше работаю с Oracle, тем больше, да, чувствую себя изгнанным из рая.
между прочим существует промежуточная между DBA и full-stack developer профессия: разработчик баз данных
разработчик баз данных
А кто это? Не те ли это извращенцы, которые реализуют бизнес логику в хранимых процедурах в 2015 году?
Баг в том, что представление в памяти программы не соответствует представлению в базе данных. Каждый из них может заявлять, что проблема на другой стороне, а у него всё в порядке. И вот для этого и нужен controllable query, чтобы несовместимые представления при попытках сочленения выдавали ошибку статической типизации.Нет. Баг в том, что MySQL молча обрезает значения, записываемые в базу.
Ты можешь хоть усраться со своей статической типизацией или наоборот с динамическими проверками, если твоя база данных тебе может иногда в чём-то врать, то как ты её не обкладывай проверками, всегда есть вероятность того, что она тебе наврёт так, что ты этого не заметишь.
Солюшен: не использовать базы данных которые врут. Используйте настоящие базы данных, например совершенно бесплатную и опенсорсную PostgreSQL.
И часто ты проверяешь целостность, скажем, Map коллекции в своём языке программирования?
Чем больше работаю с Oracle, тем больше, да, чувствую себя изгнанным из рая.угу, оракл пропитан неуважением к разработчику
А кто это? Не те ли это извращенцы, которые реализуют бизнес логику в хранимых процедурах в 2015 году?по-разному бывает
как минимум, эти извращенцы проектируют структуру БД и оптимизируют медленные запросы, написанные фулл-стеками, в том числе заносчивыми и самоуверенными
зачастую также эти подлецы действительно реализуют нетривиальную работу с данными на хранимых процедурах и почему-то при этом не гоняют данные на клиент и обратно между запросами
наверное потому что для работы с БД они используют плохую библиотеку, не иначе
Баг в том, что MySQL молча обрезает значения, записываемые в базу.Ну как минимум это ложь. По-умолчанию он выдаёт ворнинг. Его можно либо обработать на стороне приложения (я когда недавно писал скриптик для миграции где как раз были проблемы со слишком дллинными полями сделал именно так) либо переключить мускуль в режим когда он выдаёт ошибку вместо ворнинга:
mysql> desc tokens
-> ;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| user_id | int(11) | YES | MUL | NULL | |
| token | varchar(32) | NO | PRI | NULL | |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into tokens (user_id, token) VALUE (2, 'sdfsdfsdfdsjhfkjsdhfkjdshf');
Query OK, 1 row affected (0.01 sec)
mysql> insert into tokens (user_id, token) VALUE (2, 'sdfsdfsdfdsjhfkjsdhfkjdshffdjghfdkjghfdjhgfjdhgjdfhgjdfhgjdfkhgdjkfhgfjdkhgfkdjhg');
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> SET @@sql_mode:=TRADITIONAL;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tokens (user_id, token) VALUE (2, 'sdgddfsdfsdfdsjhfkjsdhfkjdshffdjghfdkjghfdjhgfjdhgjdfhgjdfhgjdfkhgdjkfhgfjdkhgfkdjhsg')\G
ERROR 1406 (22001): Data too long for column 'token' at row 1
Такое поведение базы. Вот тут недавно шурик распинался про фулл-стак разработчиков. Эти фулл-стак разработчики должны знать как правильно работать с базой. А если пользоваться ORM то он берёт это на себя. Например в джанге таких проблем нет - он проверит перед инсёртом в базу.
И в общем-то достаточно вспомнить, что в sql нет явного порядка записей, что на корню убивает перформанс любых задач с порядком.SQL абстрагирует логику от низкоуровневых структур данных. Ты создаешь обычные таблицы, выражаешь логику SQL-запросами, а потом прозрачно (не меняя кода запросов) тюнишь опции хранения таблиц. Например, если надо быстро выбирать данные по порядку, в оракле можно сказать чтобы у тебя таблица была организована как дерево.
о-вторых, в ЯП можно использовать не только индекс, но и сортировку и предварительное группирование
В номальных системах программирования предварительная группировка делается прозрачно и декларативно
конкретная имплементация человеком обычно одна из лучших возможных, а вот что там навыводит автоматический скедулер это еще вопрос
Раньше программисты на ассемблере так говорили про C.
Раньше программисты на ассемблере так говорили про C.И это до сих пор верно - при небольшом объеме кода.
Типичный объем SQL кода растет совсем не так быстро.
Типичный объем SQL кода растет совсем не так быстро.что такое типичный объем кода SQL?
на js тоже типичный объем кода не растет быстро, как думаешь почему?
на js тоже типичный объем кода не растет быстроДумаю, статистика npm противоречит этому утверждению
Думаю, статистика npm противоречит этому утверждениюЭто статистика детских песочниц.
До сих пор LOB приложения пишут на WinForms и WPF. При всех убожествах этих технологий. Просто с js на таких проектах будет еще хуже. Есть робкие шаги в виде TypeScript. Но TS уже несколько лет, .NET в начале 2000-х за такое количество лет уже вовсю рулил в эентерпрайзе.
Оставить комментарий
yroslavasako
Уязвимость в Bugzilla, позволяющая завести привилегированный аккаунтВ Bugzilla, платформе для ведения базы данных ошибок, контроля за их исправлением и общего координирования процесса разработки, выявлена критическая уязвимость (CVE-2015-4499), дающая возможность завести привилегированный аккаунт, имеющий доступ к закрытой информации, например, к непубличным обсуждениям неисправленных уязвимостей. Эффект от указанной уязвимости напоминает раскрытую несколько недель назад атаку на Bugzilla, в результате которой злоумышленники получили доступ к информации о неисправленных уязвимостях в Firefox в результате перехвата пароля одного из пользователей.
Уязвимость уже устранена в выпусках Bugzilla 5.0.1, 4.4.10 и 4.2.15. Суть проблемы в том, что при сохранении в MySQL логин/email молча обрезается до 255 символов, так как столбец в БД имеет тип tinytext. Таким образом, атакующий может завести аккаунт с адресом "bbbbb...@mozilla.org.site.com", хвост ".site.com" которого будет за пределами 255 байт. Такой аккаунт пройдёт процедуру подтверждения (email с кодом подтверждения будет отправлен на необрезанный адрес), но будет сохранён в БД как "bbbbb...@mozilla.org", что позволит ему просматривать закрытые обсуждения. При заведении аккаунта Bugzilla автоматически добавит подложный аккаунт в группы, соответствующие правилам, заданным через регулярные выражения, например, в bugzilla.mozilla.org добавление в закрытые группы производится при наличии в email домена "mozilla.org".
-------------------------------------------
Шурик, торжествуй!