Python is a widely used high-level programming language for general-purpose programming. Python is a simple, powerful and easy to learn the programming language. It is commonly used for Web and Internet development, Scientific and Numeric computing, Business application and Desktop GUI development etc. The basic data structures in python are lists, dictionaries, tuples, strings and sets
In this tutorial on Kotlin Jetpack, we will learn why Jetpack compose, What is Kotlin Jetpack compose, and How does compose works?. We will also learn about Composable function, Layouts, and material design. At last, we will have a look at the List and animations.
What is Kotlin Jetpack compose?
Why Jetpack compose?
How does the compose work?
Composable function
Layouts
Material design
List and animations
JPA의 기본 개념에 대해 설명하고 MyBatis로 작성된 애플리케이션을 JPA로 리팩토링하는 과정을 단계별로 살펴봅니다.
목차
1. MyBatis
2. Why JPA?
3. MyBatis to JPA
- JPA 설정
- Entity
- 연관관계 설정
- Repository
- 애플리케이션에서의 사용
대상
- MyBatis를 실무에 사용하고 있으면서 JPA 도입을 고려하고 있는 백엔드 개발자
- JPA를 적용하면서 어려움을 겪었거나 JPA를 실제 적용하는 과정이 궁금한 개발자
Python is a widely used high-level programming language for general-purpose programming. Python is a simple, powerful and easy to learn the programming language. It is commonly used for Web and Internet development, Scientific and Numeric computing, Business application and Desktop GUI development etc. The basic data structures in python are lists, dictionaries, tuples, strings and sets
In this tutorial on Kotlin Jetpack, we will learn why Jetpack compose, What is Kotlin Jetpack compose, and How does compose works?. We will also learn about Composable function, Layouts, and material design. At last, we will have a look at the List and animations.
What is Kotlin Jetpack compose?
Why Jetpack compose?
How does the compose work?
Composable function
Layouts
Material design
List and animations
JPA의 기본 개념에 대해 설명하고 MyBatis로 작성된 애플리케이션을 JPA로 리팩토링하는 과정을 단계별로 살펴봅니다.
목차
1. MyBatis
2. Why JPA?
3. MyBatis to JPA
- JPA 설정
- Entity
- 연관관계 설정
- Repository
- 애플리케이션에서의 사용
대상
- MyBatis를 실무에 사용하고 있으면서 JPA 도입을 고려하고 있는 백엔드 개발자
- JPA를 적용하면서 어려움을 겪었거나 JPA를 실제 적용하는 과정이 궁금한 개발자
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
Spring JPA를 이용한 연관 관계 매핑이나 Spring Data JPA Repository의 여러 기능들 중에서
막연하게만 알고 있었거나 널리 소개되지 못한 내용에 대해 함께 살펴봅니다.
목차
1. Spring JPA의 사실과 오해
2. 연관 관계 맵핑에 대한 모든 것
3. Spring Data JPA Repository의 숨겨진(?) 기능
대상
- Spring JPA에 대한 기본 지식이나 사용 경험은 있지만, 실무 적용에 여러 가지 어려움을 겪고 있는 개발자
- 막연히만 알고 사용했던 연관 관계 매핑이나 Spring Data JPA Repository에 대해 보다 깊이 있는 내용을 알고 싶은 개발자
■관련 동영상: https://youtu.be/kBXVCuZnV7Y
The lazy programmer's guide to writing thousands of testsScott Wlaschin
We are all familiar with example-based testing, as typified by TDD and BDD, where each test is hand-crafted.
But there's another approach to writing tests. In the "property-based testing" approach, a single test is run hundreds of times with randomly generated inputs. Property-based testing is a great way to find edge cases, and also helps you to understand and document the behavior of your code under all conditions.
This talk will introduce property-based testing, show you how it works, and demonstrate why you should consider adding this powerful technique to your toolbelt.
Beautiful Slide Presentation on Different orders of Entomology with the help of Pictures. Download it and see the magic, it is highly dynamic presentation. you will must like it.
Pollination services and pollinator diversity are essential in preserving food security and conservation of biodiversity. Bees are one of the very important pollinators. Besides the very well-known honeybees there are many other bee species that play significant roles.
Cross platform app development with flutterHwan Jo
Brief explanation of Flutter(Android / iOS cross platform development framework made by Google), presented on May 2018 at developers meetup, by Hyperconnect Inc.
※다운로드하시면 더 선명한 자료를 보실 수 있습니다.
Spring JPA를 이용한 연관 관계 매핑이나 Spring Data JPA Repository의 여러 기능들 중에서
막연하게만 알고 있었거나 널리 소개되지 못한 내용에 대해 함께 살펴봅니다.
목차
1. Spring JPA의 사실과 오해
2. 연관 관계 맵핑에 대한 모든 것
3. Spring Data JPA Repository의 숨겨진(?) 기능
대상
- Spring JPA에 대한 기본 지식이나 사용 경험은 있지만, 실무 적용에 여러 가지 어려움을 겪고 있는 개발자
- 막연히만 알고 사용했던 연관 관계 매핑이나 Spring Data JPA Repository에 대해 보다 깊이 있는 내용을 알고 싶은 개발자
■관련 동영상: https://youtu.be/kBXVCuZnV7Y
The lazy programmer's guide to writing thousands of testsScott Wlaschin
We are all familiar with example-based testing, as typified by TDD and BDD, where each test is hand-crafted.
But there's another approach to writing tests. In the "property-based testing" approach, a single test is run hundreds of times with randomly generated inputs. Property-based testing is a great way to find edge cases, and also helps you to understand and document the behavior of your code under all conditions.
This talk will introduce property-based testing, show you how it works, and demonstrate why you should consider adding this powerful technique to your toolbelt.
Beautiful Slide Presentation on Different orders of Entomology with the help of Pictures. Download it and see the magic, it is highly dynamic presentation. you will must like it.
Pollination services and pollinator diversity are essential in preserving food security and conservation of biodiversity. Bees are one of the very important pollinators. Besides the very well-known honeybees there are many other bee species that play significant roles.
Cross platform app development with flutterHwan Jo
Brief explanation of Flutter(Android / iOS cross platform development framework made by Google), presented on May 2018 at developers meetup, by Hyperconnect Inc.
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
Microsoft Azure, пожалуй, самый очевидный выбор для .NET разработчиков, когда они (или их клиенты) внезапно решают, что им нужен клауд. Но при этом мы все равно используем подходы и техники из до-облачного мира, иногда и не подозревая о тех сервисах и удобствах, которые нам дает Azure. На этом докладе Сергей покажет, как быстро и эффективно можно разрабатывать современное веб приложение. Мы затронем разные аспекты -- от организации кода до деплоя и мониторинга приложений, работающих в проде. Документация API, поддержка рабочих процессов, инициализация приложений, полезные инструменты и библиотеки -- все это, и не только, ждет вас на нашем докладе.
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
Лекция Петра Волкова в Школе вебмастеров: «Как защитить свой сайт».
https://academy.yandex.ru/events/webmasters_school/yawebm2015/
Актуальные типы угроз и динамика их развития
Компрометация сервера и её последствия. Распределённые атаки типа «отказ в обслуживании». Подмена или добавление рекламы на стороне клиента. Атаки, направленные на пользователей. Проблемы, связанные со внешним содержимым.
Управление рисками безопасности веб-сайтов
Разные типы сайтов подвержены разным типам рисков информационной безопасности. Понимание целей и подходов злоумылшенников как ключ к эффективному снижению рисков. Методы монетизации атак на сайты.
Доступный инструментарий и методики для обеспечения безопасности
Открытые инструменты форензики для типовых и сложных проектов. Системы обнаружения вторжений, подходы к проектированию безопасности в архитектуре и процессах.
Практические основы тестирования на php Unit-test: понятия, тонкости, пути решения, вопросы для проработки.
PHPUnittest fast start
Разработано http://webgloss.ru
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
Примеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
Слайды вебинара http://www.ptsecurity.ru/lab/webinars/#42235 :
"Каковы формальные признаки уязвимого и защищенного кода? Что такое уязвимость? Как разглядеть в коде уязвимость для атак, принадлежащих неизвестному классу? Чем уязвимости бизнес-логики отличаются от «традиционных» уязвимостей? Мы ответим на эти вопросы на вебинаре, посвященном теоретическому минимуму предметной области Application Security и практическому применению этих знаний в задачах анализа защищенности и при разработке защищенного кода"
2. Хорошо забытое старое: файловая система
Устройства DOS и зарезервированные имена:
NUL:, CON:, AUX:, PRN:, COM[1-9]:, LPT[1-9]: - двоеточие
необязательно, имена могут использоваться внутри пути
Зарезервированные символы:
< > : " / | ? *
Регистронезависимость имен:
Filename == FileName == filename == FILENAME
Поддержка коротких имен «8.3»:
LongFileName.Extension ~= LONGFI~1.EXT ~= LO0135~1.EXT
Завершающие символы:
Filename == Filename... == Filename
3. Хорошо забытое старое: файловая система
Именованные каналы и почтовые слоты (CreateFile):
Hostpipe<name> , Hostmailslot<name>
Альтернативный синтаксис относительных путей:
C:Windowsnotepad.exe == C:notepad.exe , если Windows –
текущий каталог диска C:
Подстановки (FindFirstFile):
< == * , > == ? , " == .
UNC и Unicode пути:
C:WindowsSystem32
HostC$WindowsSystem32
.C:WindowsSystem32
?C:WindowsSystem32
?UNCHostC$WindowsSystem32
4. Хорошо забытое старое: файловая система
Метатрибуты и альтернативные потоки данных NTFS:
Directory:<Name>:<Type>File:<Name>:<Type>
C:Windowshh.exe == C:Windows:$I30:$INDEX_ALLOCATIONhh.exe
C:Windowsnotepad.exe == C:Windowsnotepad.exe::$DATA
FileName.aspx == FileName.aspx:.jpg
Метатрибуты файлов Метатрибуты индексов
$STANDARD_INFORMATION $INDEX_ROOT
$FILE_NAME $INDEX_ALLOCATION
$DATA $BITMAP
$ATTRIBUTE_LIST
$OBJECT_ID
$REPARSE_POINT
5. [PT-2012-06] Обход ограничений Nginx
Рейтинг опасности: Средний (5.0)
(AV:N/AC:L/Au:N/C:P/I:N/A:N)
Подверженные версии: Nginx for Windows <= v1.3
Вектор: Удаленный
Ошибка позволяла злоумышленнику направлять HTTP-запросы к некоторым
URL-адресам в обход правил, определенных в директивах ‘Location’
конфигурации веб-сервера.
Эксплуатируя уязвимость, потенциальный хакер мог получить доступ к
исходному коду веб-приложения и закрытым разделам сайта, обнаружить
новые уязвимости, украсть пароли подключения к базе данных и прочим
сервисам и т.д.
:$I30:$INDEX_ALLOCATION
обрабатывались, как часть имени каталога.
6. [PT-2012-06] Обход ограничений Nginx
http://hostname/.svn/entries
http://hostname/.svn::$INDEX_ALLOCATION/entries
HTTP/1.1 200 OK
Server: nginx/1.2.0
HTTP/1.1 403 Forbidden
Server: nginx/1.2.0
* стабильная версия nginx-1.2.0 for Windows, выпущена 2012-04-23
…
location ~/.svn/ {
deny all;
}
…
8. Повреждения памяти
Взаимодействие с native-библиотеками, использование смешанных
сборок
MS12-025, апрель 2012: - выполнение произвольного кода за
пределами исполняющей среды через переполнение целого и
повреждение кучи в gdiplus.dll при вызове конструктора класса
System.Drawing.Imaging.EncoderParameter.
Небезопасный управляемый код
unsafe void bufferOverflow(string s)
{
char* ptr = stackalloc char[10];
foreach (var c in s)
{
*ptr++ = c
}
}
9. «Turkish I» и не только
Сравнение строк без учета текущей культуры, может привести к
непредвиденным последствиям:
Английские культуры: I & i
Турецкие культуры: I & ı + İ & i
<%@ Page Language="C#" Culture="Auto" %>
<%@ Import Namespace="System.Globalization" %>
<! DOCTYPE html>
…
<script runat="server">
…
if (Session["mode"].ToLower() != "admin")
…
if (String.Compare(Request["path"]), 0,
"FILE:", 0, 5, true)
…
10. Коллизии хэшей объектов
System.Object.GetHashCode() - возвращает 32-разрядный хэш-код объекта
(принимает значения от -2147483648 до 2147483647).
(http://blogs.msdn.com/b/ericlippert/archive/2010/03/22/socks-birthdays-and-hash-collisions.aspx)
11. Коллизии хэшей в ASP.NET (MS11-100)
Штатная ситуация: Не очень штатная ситуация:
3QBZJK5ZX=&NEUQ7BWAV6=&6902D0YP6J=&9PZGHCDJYD=&NU73S3KNV=&IF686YJQJ8K=&9XUUCJEENJ=&F
X4A75F91FM=&IGJKQVBZAVK=&LJVJV6J3UZ=&X7GJ5MWXY=&6AVIZWTVK=&WQNIQ7OZMS=&IM1VKMZHK6F=&
DO9WX2R9H=&RYLZSIQT8V=&KR9BBFUH2E=&UI8N4SWVWW=&TL5F6URVPP=&B1P81FWDSVV=&CM6Y80XSAO=&
LE72GBPWB=&EEFMULEXC=&M6FKM13WB=&MGN8123XA2K=&ZMI35GXHMN=&LXQQOM138LL=&XXST36DRX=&JR
YRV54TFZ=&LGG3X9MFN7=&MH1NI402I22=&MHFIKIM0TEH=&BWPRVCQ4X3=&RM6K7V75WZ=&SMIAE6PAL4=&
MOCGW14ZU7=&I0JKKKOG7EN=&Q4B9V7L3VZ=&23UAYU5B31=&9TRJE0XRWQ=&3Q3LKPC2K0=&D3ACY8973E=
=&VGJPMCQHP=&AV6THWSCA7=&MH5SM8NPWB1=&P57KEP668X=&81C4LQ4DFY=&MPJBASYMRM=&25EWGNN5NE
… over 4Mb form data …
(https://github.com/HybrisDisaster/aspHashDoS)
12. Хитрый план (post-mortem MS11-100)
1. Рассчитываем 1000 строк с
коллизиями на каждую
комбинацию «версия
.NET»/«аппаратная платформа»
2. Отправляем каждый из
наборов в качестве параметров
POST-запроса
3. Замеряем время ответа на
каждый запрос
4. ???
5. ;)
15. Специфика ASP.NET
Специальные каталоги и файлы:
- App_Browser – определения браузеров
(*.browsers);
- App_Code – исходный код вспомогательных
классов и логики;
- App_Data – хранилища данных;
- App_GlobalResources, App_LocalResources –
ресурсы приложения (*.resx, *.resources);
- App_Themes – темы (*.skin, *.css, images, etc);
- App_WebReferences – ссылки на web-сервисы
(*.wsdl, *.xsd, *.disco, *.discomap);
- Bin – скомпилированные сборки, используемые приложением;
- web.config, web.*.config – конфигурационные файлы, определяющие
настройки web-сервера и приложения.
16. Специфика ASP.NET
Стандартные HTTP-обработчики:
- WebResource.axd – доступ к статическим ресурсам, внедренным в сборки
приложения.
- ScriptResource.axd – доступ к скриптам js, внедренным в сборки или хранящимся
на диске.
Использование:
http://hostname/*Resource.axd?d=<resourceId>&t=<timestamp>
Пример:
http://hostname/ScriptResource.axd?d=JuN78WBP_dBUR_BT9LH1wlP
8mXnNcENfktCX8YwH3sHG7wWwvn73TZaaChQhQtyzip3-
kumGx1U67ntTt0sXKCn22VGvaQ3V4mXtCFgW9M1
Где d, зашифрованный параметр:
Q|~/Scripts/Script1.js,~/Scripts/Script2.js,~/Scripts/Script3.js|#|21c3
8a3a9b
17. Padding oracle (MS10-070)
Последствия:
– получение ключей, необходимых для шифрования/дешифрования:
аутентификационных cookies;
ViewState и Event Validation;
аргументов для WebRecource.axd и ScriptResource.axd =>
чтение произвольных файлов внутри каталога
приложения
Исправления:
при ошибке паддинга возвращается обощенная ошибка;
используется случайное число в качестве IV;
изменен формат шифруемых строк для их валидации;
ScriptResource.axd может обрабатывать только *.js файлы.
19. Особенности эксплуатации LFI
Response.WriteFile(<vfilename>)
- позволяет включать любой файл внутри каталога приложения, кроме *.config;
- файл включается статически, выполнения кода не происходит;
- принимает в качестве аргумента виртуальное имя файла.
Server.Execute(<vfilename>)
- позволяет включать любой файл внутри каталога приложения, кроме *.config;
- выполняет обработчик для переданного файла, результат включает в ответ;
- принимает в качестве аргумента виртуальное имя файла.
File.ReadAllText(<filename>)
- позволяет включать любой файл, на который есть права;
- файл включается статически, выполнения кода не происходит;
- принимает в качестве аргумента реальное имя файла.
21. Состояние представления (ViewState)
Предназначено для передачи на
сервер информации об элементах
представления.
- передается в параметре
__VIEWSTATE;
- шифрование и целостность часто
не обеспечиваются;
- используется разработчиками, для
хранения данных сессии на
клиенте, хотя не предназначено
для этого;
- нарушение его целостности может
привести к реализации самых
разнообразных угроз от XSS до
нарушения функциональности
приложения.
22. Подтверждение запросов и событий
Request Validation – встроенный примитивный WAF, направленный на
предотвращение атак XSS. Блокируются все запросы, содержащие:
&#
< с последующей буквой, !, / и ?
А также, игнорируются сторонние параметры, начинающиеся с __
Event Validation – встроенный механизм валидации
данных событий. Представляет собой параметр
__EVENTVALIDATION, хранящий хэши допустимых
значений элементов форм, событий, ViewState и т.п.
Вопреки бытующему мнению,
неэффективен против CSRF-атак,
при стандартной реализации.
23. Mass assignment
public class User
{
public int Id
{ get; set; }
public string UserName
{ get; set; }
public string Password
{ get; set; }
public bool IsAdmin
{ get; set; }
}
public class UserController : Controller
{
IUserRepository _userRepository;
public UserController(IUserRepository userRepository) {
_userRepository = userRepository;
}
public ActionResult Edit(int id) {
var user = _userRepository.GetUserById(id);
return View(user);
}
[HttpPost]
public ActionResult Edit(int id, FormCollection collection) {
try {
var user = _userRepository.GetUserById(id);
UpdateModel(user);
_userRepository.SaveUser(user);
return RedirectToAction("Index");
} catch {
return View();
}
}
}
Model: Controller:
25. Внедрение выражений LINQ
LINQ – язык запросов, встроенный в синтаксис .NET-языков.
var result = from item in itemsList
where item.field1 % 2 == 0
orderby item.field2 descending
select new { item.field2, item.field3 };
var result = itemsList
.Where(x => x.field1 % 2 == 0)
.Select(x => new { x.field2, x.field3 })
.OrderByDescending(x => x.field2);
Expression.Lambda<Predicate<int>>(
Expression.Equal(
Expression.Modulo(
parameterN,
Expression.Constant(2)
),
Expression.Constant(0)
),
parameterN);
26. Внедрение выражений LINQ
Dynamic LINQ – одна из нескольких существующих библиотек для
формирования динамических LINQ-запросов времени исполнения.
Возможности:
- определение выражений строками;
- основные примитивные операции;
- доступ к членам статических и
экземплярных типов данных;
- создание экземпляров типов и
анонимных типов;
Что, если "modifier" формируется
из входных данных и содержит:
0 OR 1 == 1 ?
var modifier = "0";
var result = itemsList
.Where("field1 % 2 == " + modifier)
.Select(x => new { x.field2, x.field3 })
.OrderByDescending(x => x.field2);
27. Внедрение выражений LINQ
Ограничения инъекций в Dynamic LINQ:
- доступ к полям, свойствам и методам возможен только для типа коллекции
или для достижимых типов, определяемых «белым списком»;
- все части выражения должны выполняться без ошибок, в сообщениях об
ошибках отсутствует полезный вывод;
- инъекции подвержены изолированные части запроса;
Возможности инъекций в Dynamic LINQ:
- обход аутентификации / авторизации;
- неавторизованный доступ к данным коллекции;
- нарушение функционала (при наличии у объектов коллекции statefull-
полей);
- реализация угрозы отказа в обслуживании (DoS).
В других решениях возможна реализация угрозы
удаленного выполнения кода (RCE)