- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
// Since styled-components allows you to use arbitrary input as interpolations, you must be careful to sanitize that input.
// Using user input as styles can lead to any CSS being evaluated in the user's browser that an attacker can place in your application.
// This example shows how bad user input can even lead to API endpoints being called on a user's behalf.
// Oh no! The user has given us a bad URL!
const userInput = '/api/withdraw-funds'
const ArbitraryComponent = styled.div`
background: url(${userInput});
/* More styles here... */
`
в процессе многолетнего пересоздания ruby on rails с нуля фронтендеры умудрились accidentally a bottle of injections
https://styled-components.com/docs/advanced#security
Fike 16.03.2021 22:00 # +1
There's no way to give your components complete immunity from the host page's styles, but you can at least boost the specificity of their style rules with babel-plugin-styled-components-css-namespace
There is a jQuery plugin for that.
bormand 16.03.2021 22:16 # 0
Лолшто? Они там скоро докер для компонентов запилят, чтобы стили не протекали?
6oHo6o 17.03.2021 01:21 # +2
https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM
Если ты хочеш не задеть чужой компонент своей версткой, то ты либо делаешь классам неймспейсы (как еще делал BEM), либо юзаеш shadow dom.
Например ангулар умеет и так, и так
bormand 17.03.2021 07:46 # 0
В сишке есть неймспейсы!
j123123 17.03.2021 09:01 # 0
booratihno 17.03.2021 13:02 # 0
pthread
CF
Nt
bormand 16.03.2021 22:02 # 0
Хм, ну там же CSRF не даст исполниться? Скучная атака какая-то, с тем же успехом можно юзеру картинку с этой ссылкой скинуть.
Fike 16.03.2021 22:08 # 0
Мы говорим про людей, приложения которых исполняют CSS на клиенте.
bormand 16.03.2021 22:18 # 0
Какой багор )))
Fike 16.03.2021 22:23 # 0
получится прокинуть геттер для гаммы, то да.
bormand 16.03.2021 22:29 # 0
Ну т.е. я правильно понимаю, что поверхность атаки -- по сути все-все-все компоненты этого фреймворка. И если какой-нибудь из этих styled.div коряво поклеит хтмл из этих кусков, то кровь-кишки.
bormand 16.03.2021 22:34 # 0
Fike 16.03.2021 22:34 # 0
> хтмл
CSS, для хтмл к счастью есть реакт, который совсем уж хуйней не занимается
bormand 16.03.2021 22:35 # 0
Кстати, а ничего что тут в одном примере смешали код, разметку и стиль? По-моему пару лет назад за это обоссывали ещё.
MAKAKA 16.03.2021 22:36 # 0
но к чести реакта, он всё эскейпит, конечно
Fike 16.03.2021 22:50 # 0
> мы придумали разметку чтобы разделить данные и хтмл
> теперь добавим туда ContextProvider и другие "элементы" разметки, которые не будут делать нихуя кроме как управлять данными
bootcamp_dropout 16.03.2021 22:56 # 0
Fike 16.03.2021 23:01 # 0
чем дальше идет, тем больше понимаю какой всё-таки охуенный Vue даже со всей его ебучей автомагией
bootcamp_dropout 16.03.2021 23:05 # 0
у меня как раз сейчас такой проект где состояние каждой формы, попапа, и даже ебаную подсветку надписи вынесли в стор, как я вас ненавижу
ты похоже в теме, вот скажи мне: ну нахуя хранить состояние формы в сторе?
Fike 16.03.2021 23:07 # 0
> ну нахуя хранить состояние формы в сторе?
строго говоря для того, чтобы можно было выкинуть нахуй компонент и потом создать его в том же виде. когда заполнил (но не засабмиттил) форму на странице и случайно перешел в другой таб (приложения, не браузера) - это печально.
bootcamp_dropout 16.03.2021 23:09 # 0
Fike 16.03.2021 23:11 # 0
bootcamp_dropout 16.03.2021 23:12 # 0
это просто удобный способ описать реактовое дерево
Fike 16.03.2021 23:13 # 0
> реактовое дерево
дерево. дерево как функцию от входных данных. дерево, а не сами данные. контекст провайдер не является узлом дерева. error boundary не является узлом дерева.
bootcamp_dropout 16.03.2021 23:15 # 0
Fike 16.03.2021 23:15 # 0
bootcamp_dropout 16.03.2021 23:18 # 0
Fike 16.03.2021 23:24 # 0
jsx это не формат сериализации, потому что его результатом является функция. на выходе из jsx ты получаешь React.createElement и вот это всё, а не текстовое или бинарное представление данных.
bootcamp_dropout 16.03.2021 23:28 # 0
>jsx это не формат сериализации, потому что его результатом является функция
то что является результатом jsx решает не сам jsx. В реакте он транспилируется в вызовы апи реакта, в других бибилиотеках в вызове других апи, может где-то и в html
сам по себе jsx это именно что формат сериализации
Fike 16.03.2021 23:29 # 0
bootcamp_dropout 16.03.2021 23:32 # 0
Fike 16.03.2021 23:33 # 0
bootcamp_dropout 16.03.2021 23:35 # 0
Fike 16.03.2021 23:37 # 0
Fike 16.03.2021 23:35 # 0
да ты серьезно? jsx это чистая функция. вот тот кто хочет получить из результирующего виртуального дерева хтмл, жсон, или что там конкретный консюмер задумал - вот это он решает.
bootcamp_dropout 16.03.2021 23:36 # 0
это не функция не дерево и вообще нихуя кроме блять расширения файла
строго говоря jsx не имеет отношения к реакту
Fike 16.03.2021 23:38 # 0
bootcamp_dropout 16.03.2021 23:43 # 0
ко всему остальному js это не имеет отношения, ты с таким е успехом можешь писать React.createElement вместо тегов и ничего не зименится
Fike 17.03.2021 00:14 # +1
Потому что это синтаксический сахар, добавленный в джаваскрипт, ну ёмана, о чем я талдычу тут. Это не "веселые теги", это конструкция яызка программирования. Тернарник, разворачивающийся в if-else по-твоему это тоже просто текст в блокнотике или всё-таки часть синтаксиса языка программирования?
Давай пойдем в первоисточник, что хотели сделать реактовцы, добавляя подобный сахар? Вообще не трогаем что получилось, идем читать какие цели преследуются.
https://reactjs.org/docs/introducing-jsx.html
Раз: This funny tag syntax is neither a string nor HTML. It is called JSX, and it is a syntax extension to JavaScript.
Два: JSX produces React “elements”. Не что-то там блядь абстрактное что jsx сам не решает, нет, он изначально предназначен как сахар для весьма конкретных вызовов.
Три: Instead of artificially separating technologies by putting markup and logic in separate files
markup and logic
разметка: да
логика: да (хотя на самом деле она большей частью пишется на ванильном жс в классе / функциональном компоненте, но формально {if (condition) && <Component>} безусловно является логикой)
данные: нет
нет никаких данных, это разметка, понимаешь?
https://reactjs.org/docs/jsx-in-depth.html
четыре: Fundamentally, JSX just provides syntactic sugar for the React.createElement(component, props, ...children) function. The JSX code: ... compiles into: ...
тоже мне формат блядь сериализации
bootcamp_dropout 17.03.2021 00:28 # 0
Для меня это не часть синтаксиса, это примерно как макры в си причем от нестандартного препроцессора
Спорить с докой реакта я не буду потому что она специально упрощена и кое-что там припизднули, могу отослать к статье https://overreacted.io/react-as-a-ui-runtime/ от члена команды разработки реакта
Поначалу jsx был только синтаксическим сахаром для реакта, но оброс своим тулингом и пользователями(preact, inferno, https://github.com/ryansolid/solid эти кажется таки в хтмл компилируют) и теперь является форматом сериализации
Fike 17.03.2021 00:37 # +2
Ты им факты, уже просто прямые цитаты, они тебе абсолютно левую хуйню, которая до этого вообще не фигурировала в дискуссии и давай смотреть как ты обратно выруливать будешь. Или еще лучше - кинуть ссылку на статью, где говорится ровно то же самое, но с подачей типа "вот ты нихуя и не прав", чтобы ты сидел и обратно статью цитировал.
Не, в этот раз я туда не пойду, спасибо. Я понимаю что если напишу "они что, припизднули что это синтаксический сахар?" или "а что, preact или inferno это библиотека для упаковки описанных через jsx данных?" мне прилетит такая хуйня, что полночи придется придется опровергать, ссылаясь на такие статьи как "википедия:Логика" и "уголовный кодекс:Умышленное нанесение психических травм".
bootcamp_dropout 17.03.2021 00:59 # 0
>я против управления данными самой разметкой путем расставления html-alike элементов
Реакт работает и без jsx и никаких html-alike элементов там и подавно не будет если ты захочешь
Если ты захочешь то ты можешь нахуй выбросить логику из компонентов, объявив несколько деревьев без логики вообще вместо одного сложного с логикой, логику пихнуть в чисто js функции и возвращать вызовы апи реакта, и чаще всего тебе даже лишних рендеров за это не будет
Ты блять можешь даже вообще выкинуть апи реакта везде кроме корня и вызывать компоненты как функции и это даже будет работать
Ты берешь эти две по своей сути декоративных хуйни и пытаешься мне затереть что в них-то и заключается суть реакта. И более того, ты считаешь что новые фичи реакта не соответствуют его изначальным идеям но дело в том что ты неправильно представляешь себе изначальные идеи реакта
Fike 17.03.2021 01:01 # +2
bootcamp_dropout 25.07.2021 19:05 # 0
6oHo6o 17.03.2021 00:56 # 0
Больше нету "верстки-разметки": есть среда разработки фронтэнд приложения
Fike 17.03.2021 01:00 # 0
guest6 17.03.2021 01:03 # 0
Если бы вместо этого я мог бы написать <label text=".."/>", то было бы лучше?
Рассматривай JSX просто как способ написать что-то на JS.
Fike 17.03.2021 01:17 # 0
6oHo6o 17.03.2021 01:17 # −2
"new" не нужен
bootcamp_dropout 16.03.2021 22:44 # 0
MAKAKA 16.03.2021 22:48 # +1
Прощай, семантическая верстка:)
Теперь правильно говорить о "фронте" в целом, без разделения на "верстку" и "программирование"
bootcamp_dropout 16.03.2021 22:54 # 0
bormand 16.03.2021 23:27 # 0
Оставить вебасм да канвас. Ну и всякие api для файлов и сети.
А языки и разметку пусть разраб сам выбирает. Ну как на десктопе.
Desktop 16.03.2021 23:48 # 0
bormand 16.03.2021 23:56 # 0
6oHo6o 17.03.2021 00:55 # 0
MAKAKA 16.03.2021 22:34 # 0
Fike 16.03.2021 22:16 # +1
There is an upcoming standard to sanitize CSS from JavaScript, CSS.escape. It's not very well supported across browsers yet, so we recommend using the polyfill by Mathias Bynens in your app.
Именно пост-процессингом проблему идиотских подходов и надо решать.
MAKAKA 16.03.2021 22:35 # +4
Астрологи предсказывают неделю даблэскейпа. Веб макаки будут еще пять лет высирать
и срать кирпичами
bormand 16.03.2021 22:39 # +2
MAKAKA 16.03.2021 22:31 # 0