Войти
ФлеймФорумПрограммирование

safe_program_api

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 Следующая »
#0
1:41, 5 янв. 2016

прога не может использовать системное api напрямую вообще.
прога может использовать safe_api:
может CRUD`ить файлы в своей папке.
может выделать/освобождать память.
может создавать сокеты любые и склько угодно.

прога компилится в DLL или просто в бинарный файл, а затем запускаеться спецальной опенсорсной реализацией сафеапи.

эта реализация должна проверить чтобы код проги не вызывал ни одной системной функции напрямую.
затем если проверка успешно пройдена то она должна предоставить сафеапи проге и отправить ее код на выполнение.

еще очень охота и это основная затея всего сафеапи это разрешить проге модифицировать свой код во время выполнения. тоесть генерировать и исполнять его.

но при этом сгенерированый код должен использовать только сафеапи и это надо както проверять.

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

если последний выкинуть то и весь сафеапи теряет смысл.

основная цель сафеапи - это замена тормозных участоков JavaScript кода нативной безопасной программой. тоесть конечная цель сделать безопасное расширение для браузера позволяющее запускать нативные проги безопасно.

ради этого для начала можно попращаться с файловой системой и оставить только один слушающий сокет для соединения с браузером.

PS: идея не дописана, но опубликую прямо так пока не передумал. also: пишу с ведройда и поэтому вот какбэ извинения за ошибки, опечатки и отсутствие пунктуации и капса. вот. у меня всё. спасибо за внимание.



#1
8:43, 5 янв. 2016

Java

#2
10:45, 5 янв. 2016

Asm.js ещё, хотя они с противоположной стороны идут да и вообше каргокульт.
А с чистым кодом - гиблое дело, имхо. Берём адрес этого сейф_апи, вычитаем 100012, безусловный переход туда. С самомодифицирующимся кодом такое и не отследить, только если сначала интерпретировать.

#3
11:39, 5 янв. 2016

kipar
Да придеться интерпретировать. Разрешить проге передавать управление наружу только на известные адреса апи. И еще придеться запретить проге писать в память снаружи.

Эти проверки сильно уменьшат производительность проги, но другого пути нет.

#4
14:10, 5 янв. 2016

Adler
То что ты говоришь, все давно уже есть в джаве, и собственно это и называется хотспот - замена кусков кода на натив. Не проще ли написать или взять готовый security manager для джавы?


> Эти проверки сильно уменьшат производительность проги
Да, вплоть до того, что твой нативный код будет работать медленнее джаваскрипта. Ну и ты не напишешь ты ничего такого, твоя компетенция на порядок ниже, чем необходимо для написания чего-то подобного. Это не оскорбление, просто констатация факта.

#5
15:41, 5 янв. 2016

9К720
А без GC есть чё? Java же вроде решето?

>твой нативный код будет работать медленнее джаваскрипта
Теоретически если использовать всякие хардварные фичи типа виртуализации, то вроде должна быть производительность как у нативного кода. Если тебе тут интересно рассматривать крайние ситуации, то рассматривай, но меня больше интересует что в среднем нативный код будет на уровне js даже с влобной реализацией апи.

А вообще выгода тут в двух направляениях:
1) Можно писать на С++.
2) Можно использовать в играх/браузерах/осях.

А ещё если выстрелит, можно попробовать развить идею и частично похранить java, javascript, actionscript, C#, lua и пару осей.

also: хорошая попытка взять меня на слабо, но нет, я не собираюсь прямо сейчас бросать всё и делать реализацию api, я просто показал идею, вдруг кого-то она зацепит? :)

PS: когда-то всё равно кто-то это сделает, возможно ему даже не понадобиться читать этот пост чтобы придти к такому же апи.

#6
16:00, 5 янв. 2016

Adler
> А без GC есть чё?
А зачем? Хотелось бы услышать более вменяемые аргументы чем "это не тру"

>Java же вроде решето?
Во первых нет, во вторых ты почему-от думаешь что сделаешь лучше. Серьезно?

Adler
> Если тебе тут интересно рассматривать крайние ситуации, то рассматривай, но
> меня больше интересует что в среднем нативный код будет на уровне js даже с
> влобной реализацией апи.
Откуда такая уверенность?

Adler
> 1) Можно писать на С++.
У тебя цель - писать высокопроизводительные браузерные приложения, создать safe api или писать на с++? Ты уж определись.


>взять меня на слабо
Откуда у тебя столько самомнения? Я сказал конкретный факт - ты абсолютно некомпетентен, настолько что даже не понимаешь свою некомпететность. Или я ошибаюсь, и у тебя есть научные работы в области оптимизирующих компиляторов? Или у тебя есть опыт в написании виртуальных машин и ты являешься признанным специалистом в этой области? Это не оскорбление. Я тоже некомпетентен, и не смогу сделать ничего подобного с нуля. При том, что с виртуальной машиной джавы я работал достаточно долго, в т.ч. и на низком нативном уровне.

Adler
> я просто показал идею, вдруг кого-то она зацепит? :)

Однажды Садовник сказал Писателю: "Подарить тебе идейку сюжета? Самому мне писать недосуг, да и не умею толком, а у тебя выйдет прекрасный роман!" "Как мне отблагодарить тебя? - воскликнул Писатель, - Возьми в дар мой огрызок яблока! В нем с полдюжины семечек: у меня они пропадут, а ты вырастишь прекрасный яблоневый сад!"
#7
16:03, 5 янв. 2016

Ну да, у меня тоже когда-то была идея, что проги на любых языках распространяются в виде llvm bitcode и транслируются на целевой машине и что каждое обращение к памяти преобразуется в проверку + обращение и что не каждое обращение а только первое, а остальные соптимизируются и бла бла бла
Цена этим идеям известна - 10 центов за дюжину.
Если думаешь что это хорошая идея - садись и пиши код, блджад

#8
16:24, 5 янв. 2016

[sarcasm]Эх, вот если бы были опен-сорс браузеры, и можно было бы каждому с гениальной идеей взять и написать для них дополнение...[/sarcasm]

Чувак, серьезно, если ты это сделаешь для Хрома/Лисы, то ты легко найдешь себе работу с з/п в два раз больше, чем у тебя сейчас.

#9
18:02, 5 янв. 2016

9К720
> Adler
> > А без GC есть чё?
> А зачем? Хотелось бы услышать более вменяемые аргументы чем "это не тру"
Проще реализация api => меньше ошибок/уязвимостей.

> Во первых нет, во вторых ты почему-от думаешь что сделаешь лучше. Серьезно?
Я только разместил объяву и вроде как не собираюсь делать реализацию, хотя если тебе тут интересно рассматривать крайние ситуации, то да, но в среднем нет.

> Откуда такая уверенность?
js = в среднем это интепретатор ast. // в крайностях это интепретатор ast + интепретатор байткода в этих твоих hotspot`ах.
safe api =  в среднем это интепретатор байткода на нативной стороне + переголова в передаче данных через сокеты + интепретатор ast js браузера или чё у нас там на другой стороне? // в крайностях это хардварная виртуализация на обоих сторонах и никаких сокетов. вроде epic win, не? только браузеры с js и частично web придёться похранить иначе фэйл, но кого это волнет в крайностях?

>У тебя цель - писать высокопроизводительные браузерные приложения, создать safe api или писать на с++? Ты уж определись.
чё-то трудно как-то пошло. попробую случайный ответ напсать вдруг прокатит:
часть С++ кодеров сможет на огороженом С++ фигачить нормальнопроизводительные браузерные/игровые/ос приложения, "просто" портирую код с С++ на огороженную safe api версию C++, а юзеры смогут не париться по поводу старых кулхацкеров и вирусов/антивирусов и озоботятся новыми если safe api облажаеться(что весьма вероятно), но кого это волнует?

у меня две цели:
1) рассказать минимум про safe api и жить дальше как ни в чём не бывало изредка проверяя - "а не запилил ли кто уже?" и "есть ли что-то подобное?".
2) получить подверждение или опровержение, что тут реально можно какой-то гиганский профит как-то поиметь.

9К720
> Я сказал конкретный факт
Да перестань, тебе не взять меня на слабо. :)

9К720
> Я тоже некомпетентен, и не смогу сделать ничего подобного с нуля
Да ладно тебе, взял бы да сделал, там нет ничего сложного, просто очень-очень много всего простого, но раз тебе слабо, то не буду уговаривать. там делов-то всего на десятки лет, а ты уже пасанул. :)

9К720
> Однажды Садовник сказал Писателю
ну как то так, да, кстати, что там у тебя, тоже огрызок или идей про решето джаву?

Hardcode
> Если думаешь что это хорошая идея - садись и пиши код, блджад
Твою оценку идеи можно услышать в формате: поддерживаю/нет?

Ogra
> чем у тебя сейчас.
без проверки на крайние значения забавно получилось. :)

#10
18:35, 5 янв. 2016

Поздравляю, ты изобрел WebAssembly

#11
19:24, 5 янв. 2016

_zerg_
Нет.

WebAssembly is a portable abstract syntax tree[2] which is designed to be faster to parse than JavaScript
WebAssembly has several requirements and goals for its Instruction Set Architecture (ISA) and binary encoding:

    Portability: The ISA must be the same for every machine architecture.
    Stability: The ISA and binary encoding must not change over time (or change only in ways that can be kept backward-compatible).
    Small encoding: The representation of a program should be as small as possible for transmission over the Internet.
    Fast decoding: The binary format should be fast to decompress and decode for fast startup of programs.
    Fast compiling: The ISA should be fast to compile (and suitable for either AOT- or JIT-compilation) for fast startup of programs.
    Minimal nondeterminism: The behavior of programs should be as predictable and deterministic as possible (and should be the same on every architecture, a stronger form of the portability requirement stated above).

Отличие safe api от WebAssembly вот:
0) Хранить что-то типа байткод вместо js-AST.
1) выкинуть Small encoding, Fast decoding, Fast compiling и частично Portability.
2) добавить Fast execution.

Цель использования safe api - безопасно запускать высокопроизводительные нативные приложения где угодно: в ОС/браузере/игре.

#12
19:36, 5 янв. 2016

Adler
> 2) добавить Fast execution.
Будет в WebAssembly.
> Цель использования safe api - безопасно запускать высокопроизводительные нативные приложения где угодно: в ОС/браузере/игре.
Аналогично WebAssembly.

#13
21:41, 5 янв. 2016

Adler
> Твою оценку идеи можно услышать в формате: поддерживаю/нет?
Как уже говорили, идеи ничего не стоят.
Попытку реализовать коннечно поддерживаю, вне зависимости от результата.

#14
22:09, 5 янв. 2016

java!=java script
java самостоятельный язык который компилируется в байт-код и выполняется в своей виртуальной машине в песочнице и при этом разраб достцп к железу только через виртуальную машину(а разные реализация вм могут давать разный уровень доступа и разное api для работы)

javascript это ecma скрипт стандартизированный для браузеров и использующий апи браузеров. использование java в названии не имеет общего ничего с java языком, типо маркетолуховский ход. у них даже парадигмы разные... java кошерный ооп, а js адская смесь объектной модели(ооп чистый можно получить но через задницу, в смысле через замыкания) функционального программирования и шаманств.

то что ты описал по факту и есть принципы java правда там не ради безопасности а ради облегчения бытия разработчика, написал один раз а работает под всеми платформами(вопрос совместимости перенесен с разработчика по на разработчика виртуальной машины)... хотя эти игры в песочницу развили и до нормального

Страницы: 1 2 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.