Prosty CRUD - jak go dobrze zabezpieczyć

Prosty CRUD - jak go dobrze zabezpieczyć
AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
4

Trafiłem na dość teoretycznie dość proste zlecenie, klient jest trenerem osobistym / fizjoterapeutą / ortopedą, czymś tam jeszcze, generalnie prowadzi sesje z ludźmi i klika w wordzie ich przebieg i zalecenia czy też rozpisuje im trening przed kolejną sesją i potem wysyła to mailem. Chciałby mieć do tego dedykowany system, czyli zamiast w wordzie, klika coś w aplikacji, a jego klient ma w tej aplikacji swoje konto, więc w domu może się zalogować w domu i zobaczyć historię treningów czy też znaleźć najnowsze zalecenia, itp.

Generalnie, prosty jak budowa cepa CRUD, który można zaimplementować w jeden weekend, tyle, że w grę wchodzi przechowywanie danych osobowych (imię, nazwisko, email, potencjalnie jakieś dane zdrowotne). Z tego względu pytanie, czy warto? Czy potencjalne kary sprawiają, że trzeba do ceny doliczyć kilka zer?
Pod względem samego bezpieczeństwa, powiedzmy że system i baza danych mają silne hasła, które nie wpadną w niepowołane ręce, a komunikacja server-client i client-user odbywa się poprzez HTTPS. Dodatkowo całość jest zabezpieczona przed najpopularniejszymi atakami i kod został sprawdzony przez jakieś Veracode, Defendboty czy coś podobnego. Czy atak i wyciek danych osobowych z aplikacji, która ma 100~ użytkowników jest realny? Druga sprawa, co jeszcze zrobić by móc spać spokojnie? Jakieś sprawdzone materiały na temat bezpieczeństwa aplikacji webowych są mile widziane. A może jakieś kruczki prawne, bądź po prostu umowa sformułowana w ten sposób, że jako programista dostarczam jedynie aplikację, ale nie odpowiadam za to co się z nią później dzieje?

edytowany 1x, ostatnio: AngryProgrammer
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 11 godzin
  • Postów:5109
0

Jeszcze dodałbym pytanie jak to najlepiej wdrożyć aby pozbyć się całego security związanego z OSem itd.

No wiecie, aby zamiast jakiegoś VPSa z czystym OSem i całym tym overheadem dot. utrzymania, to mieć coś praktyczniejszego i przerzucić security na vendora

nie wiem, może te AWS Lambdy czy Funkcje rozwiązują ten problem?

jest tu jakiś chmurer? :D

bakunet
  • Rejestracja:prawie 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:Polska
  • Postów:1596
0

Wczoraj z ciekawości przeglądałem książki o bezpieczeństwie aplikacji webowych. Sugeruję od nich zacząć. Sam chcę się zabrać za coś w tym temacie, tylko ciągle czasu brakuje :/ Nowoczesne frameworki często zabezpieczają przed popularnymi atakami, więc sporo rzeczy masz z głowy, jeśli nie popełniłeś jakichś błędów autentykacji / autoryzacji. Ale sam jestem ciekaw co mają do powiedzenia inni.

KA
Jakie książki o bezpieczeństwie aplikacji webowych polecasz?
UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
3

Pogadaj z prawnikiem. Spisz odpowiednie umowy. Będą konieczna zgody rodo itp ale to już ten koleś powinien mieć jak trzyma to w wordach. Poza mocnymi hasłami mozesz wprowadzić podwójne sprawdzenie przy logowaniu albo utrzymywanie haseł wywalić na zewnątrz do usługi Azure albo aws

AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
0

@WeiXiao:

Security of the cloud – AWS is responsible for protecting the infrastructure that runs AWS services in the AWS Cloud. AWS also provides you with services that you can use securely. Third-party auditors regularly test and verify the effectiveness of our security as part of the AWS compliance programs. To learn about the compliance programs that apply to AWS Lambda, see AWS Services in Scope by Compliance Program.

Security in the cloud – Your responsibility is determined by the AWS service that you use. You are also responsible for other factors including the sensitivity of your data, your company’s requirements, and applicable laws and regulations.

https://docs.aws.amazon.com/lambda/latest/dg/lambda-security.html

Muszę to doczytać, ale brzmi jak coś co by mi pomogło

koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
2

A po co w takiej aplikacji przechowywać dane osobowe? Rozumiem, że dane osobowe po stronie fizjoterapeuty są potrzebne (i ma je sobie w Wordzie), ale przesyłanie ich przez apkę mija się z celem -- można oprzeć wszystko o jakieś nicki i po sprawie? W końcu on i tak się z tymi pacjentami musi spotykać...

bakunet
Może chce przechowywać zdjęcia i filmy, żeby móc ich później szantażować ;p
koszalek-opalek
A, to co innego -- ale wtedy chyba lepiej bez umów. :)
AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
0

@koszalek-opalek:
Nie bardzo to widzę - przychodzi pacjent na pierwszą wizytę, trzeba mu założyć konto i podać mu dane logowania. Rozumiem, że nie chcemy tutaj maila ani nic osobistego, czyli generujemy nick typu misUszatek93, a mój klient w notesie sobie robi wpis, że ten misUszatek93 to tak naprawdę Jan Kowalski. W trakcie wizyty mój klient wyszukuje w systemie misa uszatka i prowadzi dalej wizytę, robiąc jakieś notatki dla niego. No i po wizycie Jan Kowalski loguje się z domu jako misUszatek93.

Oczywiście zamiast misia uszatka można tutaj wygenerować jakiś prosty login typu 12345, ale nie zmienia to faktu że pewnie każdy wolałby się logować podająć np. swój adres email niż losowy ciąg cyfr, no a mój klient będzie musiał prowadzić osobny system który mapuje loginy do prawdziwych ludzi

#Edit

Teoretycznie, aplikacja po stronie mojego klienta może być desktopowa z lokalną bazą danych pacjentów. Wtedy zostaje możliwość wyszukania konkretnego pacjenta po imieniu i nazwisku, a na zdalnym serwerze trzymane są identyfikatory pacjentów, które też słuzą im do logowania do systemu.

edytowany 2x, ostatnio: AngryProgrammer
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1874
0

A nie możesz wykorzystać OAuth/OpenId, żeby użytkownicy mogli się logować kontem Google (albo GitHubem ;) )?


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
0

@Charles_Ray:
Wtedy i tak muszę ten email w swojej bazie danych trzymać, a email to chyba też dane osobowe?

TR
email może podlegać pod rodo, jeśli po adresie email można jednoznacznie określić osobę, więc i tak i nie :)
AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
1

email może podlegać pod rodo, jeśli po adresie email można jednoznacznie określić osobę, więc i tak i nie :)

Też mi się tak wydawało, więc opcja z OAuth i logowaniem z Google nie wchodzi w grę. Chyba, ze trzymać w bazie tylko hash emaila, teoretycznie dałoby się to w ten sposób zaimplementować logowanie, o ile się nie myle.

Druga opcja to tak jak wspomnialem:

  • desktopowa aplkacja z lokalną bazą danych, w której trzymam dane osobowe (imię, nazwisko) wraz z identyfikatorem użytkownika czyli jego loginem
  • zdalny serwer, obsługujacy logowanie oraz przechowujący te notatki dla pacjentów, z tym że tutaj identyfikatorem jest wcześniej wspomniany ID
  • aplikacja webowa, gdzie użytkownik loguje się przez wspomniany ID i ma dostęp do swoich danych

W ten sposób dane osobowe znajdują się jedynie na lokalnym komputerze mojego klienta, przez siec przesyłam oczywiście dane z sesji (wizyty lekarskiej) konkretnego pacjenta, ale nie są one nigdzie podpisane imieniem i nazwiskiem, a jedynie identyfikatorem. Teoretycznie ma to sens i jest na pewno bezpieczniejsze niż trzymanie danych osobowych na zdalnym serwerze, pytanie czy w praktyce coś mi nie umknęło? :)

edytowany 1x, ostatnio: AngryProgrammer
UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
3

Mam wrażenie, że popadasz w jakąś paranoje. Jak byś się nie starał to i tak najsłabsze ogniwo każdego systemu znajduje się między fotelem a monitorem i to ono najczęściej zawodzi. Przede wszystkim zadbaj o aspekt prawny cała reszta zgonie ze sztuką.
Identyfikator musisz jednoznacznie powiązać z danymi klienta co już jest dla RODO wystarczające.

AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
0

@UglyMan:

Przede wszystkim zadbaj o aspekt prawny cała reszta zgonie ze sztuką.

Co dokładnie rozumiesz przez aspekt prawny?

UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
3

@AngryProgrammer: Odpowiednio spisana umowa - jak wyciekną dane z winy użytkownika to żeby ciebie nie pociągnął do odpowiedzialności. To, że nie odpowiadasz za serwer gdzie to stoi i jak ktoś tam się włamie i wyciągnie bazę to tez nie twoja wina. Poza tym klient powinien zadbać o odpowiednie regulaminy, klauzule rodo (łącznie z tym, komu przekazuje dane - np logowanie, system mailingowy) itp. Techniczne należy wykonać zgodnie ze sztuką reszta to problem biurokracji i prawników.l

koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
0
UglyMan napisał(a):

Identyfikator musisz jednoznacznie powiązać z danymi klienta co już jest dla RODO wystarczające.

O aspekcie prawnym masz rację, ale jednoznaczne powiązanie nie musi podpadać pod RODO...

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1874
1

Ale co z tym RODO? Pokazujesz płachtę rodo, user w ciemno wyraża zgody i jechane? Czy Ty na jakiś audyt bezpieczeństwa się szykujesz?


”Engineering is easy. People are hard.” Bill Coughran
AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
0

@Charles_Ray:
RODO to jedna sprawa, obawiam się co jak z jakiegoś powodu wszelkie zabezpieczenia nie wystarczą, albo zrobie jakiś głupi błąd w implementacji / konfiguracji i te dane użytkowników się dostaną w niepowołane ręce.

WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 11 godzin
  • Postów:5109
0

ja nie wiem co to za podejście w tym temacie do security, wręcz na zasadzie "a po co"

edytowany 1x, ostatnio: WeiXiao
AP
Wcześnie jest i nie jestem pewien czy chodzi Ci o moje podejście, że jak to ktoś napisał popadam w paranoje czy o to, że jednak reszta bardzo lekko podchodzi do tematu bezpieczeństwa?
AP
  • Rejestracja:około 6 lat
  • Ostatnio:około 2 miesiące
  • Postów:164
0

Może inaczej zadam pytanie, zapomnijmy o próbach nie przechowywania danych osobowych w aplikacji, powiedzmy że trzymam w bazie imie, nazwisko, email i dane medyczne konkretnej osoby. Użytkownik loguje się z dowolnego miejsca i ma dostęp do tych danych (oczywiście tylko do swoich). Skończyłem implementacje "logiki biznesowej" i co dalej?

  • sama implementacja logowania to głównie framework z którego korzystam, aczkolwiek pewnie warto to mocno otestować integracyjnie
  • powiedzmy, że wdrażam wszystko na AWSa, wygląda na to że security na poziomie OS jest tam ogarnięte
  • secuity bazy danych, za pewne również AWS albo inny cloud provider, ze swojej strony zarówno tu jak i w poprzednim punkcie dostarczam mocne hasło
  • konfiguruje HTTPS w komunikacji frontend - backend oraz frontend - użytkownik
  • skanuje kod jakimś Veracode albo podobnym wynalazkiem, żeby upewnić się że nie ma oczywistych luk bezpieczeństwa w samym kodzie
  • RODO - tutaj wystarczy, że dodaje komunikat na stronie że ów aplikacja przetwarza dane osobowe? czy potrzebuje jakieś prawne zezwolenia by to robić?

O co jeszcze warto zadbać zanim aplikacja trafi na produkcje?

RE
Sorry za offtop, bo chciałbym zadać 2 pytania. Na czym polega skanowanie tym Veracode? Czy polecasz jakieś darmowe programy tego typu którymi można przeskanować np. proste REST API w Express?
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1874
0

Np. czy nie wystawiasz bazy na świat, czy aplikacja korzysta z użytkownika technicznego zamiast admina. Na AWS są spoko ogarnięte te security groupy


”Engineering is easy. People are hard.” Bill Coughran
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Kraków
  • Postów:1999
2

Czy nie wystawiasz bazy na świat

Czy baza będzie zaszyfrowana

Czy połączenie z bazą będzie bezpieczne (po SSL, certyfikaty itd)

Czy połączenie z backendem będzie bezpieczne (to samo)

Od klienta teź możesz wymagać przedstawienia się certyfikatem

Czy sekrety na pewno są sekretami i nie wyciekają gdzieś bokiem przy przepychaniu z Vaulta np. do konfiguracji/środowiska

Czy nie wyciekasz wrażliwych informacji np. w logach aplikacji

Jeśli już nawet wrzucisz w jakieś chmury i kontenery to upewnij się, że używasz m.in. bezpiecznych obrazów - było jakiś czas temu głośno o tym, że nieco ponad połowa przebadanych obrazów z Docker Hub miała krytyczne podatności :)

Jak już się upewnisz, że bazowe obrazy są bezpieczne to upewnij się, że Twoje customowe nie wprowadzają furtki

No i jeszcze był nawet taki temat jakiś czas temu na forum - co, jak komuś wycieknie token, nie wyloguje się itd.


edytowany 1x, ostatnio: superdurszlak
ZI
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:208
4

Co do RODO, z uwagi na to że przetwarzasz specjalne kategorie danych (dane medyczne), spoczywają na twoim zleceniodawcy dodatkowe obowiązki (art 9 RODO - wymienia szczególne warunki które muszą być spełnione żeby takie dane przetwarzać). Z uwagi na małą skalę omija cię art 29 RODO (powołanie inspektora danych osobowych), ale to może się zmienić jeśli ten CRUDzik się rozrośnie. Jeśli będziesz również operatorem tego systemu, to musicie sporządzić sobie umowę o powierzeniu przetwarzania danych osobowych. Nie zapomnijcie też o prawie do bycia zapominanym i prawie do dostępu do danych. Dobrze mieć też jakiś dokument analizy ryzyka jako dupochron.

Do powyższych rzeczy dodam również regularną rotację sekretów, na AWSie stosunkowo łatwo to zrobić z Secrets Managerem (ma integrację z RDSem). I poczytać o shared responsibility model - w każdym serwisie AWS bierze na sobie część ryzyka, ale chyba nigdy całe.

edytowany 1x, ostatnio: Zing
DP
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:159
0

https://firebase.google.com

Edit: Może faktycznie użyć loginu i trzymać dane w Google Sheets lub Excel przez ich API?

edytowany 1x, ostatnio: donPietro
masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
2

Jeśli jesteś firmą to najlepiej spółkę założyć ta któ®a obsługuje taką aplikację lub która sprzedaje. Możesz zabezpieczyś się technicznie, mieć RODO itd ale w razie jak wyciekną dane czy coś to kara będzie nałożona na spółkę a nie na osobę prywatną. Wtedy spółka upadnie a powstanie nowa. No bo moze nie było to z twojej winy (programisty) ale ktoś kozła ofiarnego szukać musi. Warto też i od tej strony sie zabezpieczyć.


Wymyśliłem, że nie chce mi się.
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 15 godzin
  • Postów:3277
2

Jednym z warunków przetwarzania danych osobowych jest ich celowość. Czy nie da się pozbyć tych danych? Dieta i trening nie zależą od nazwiska. Za dane osobowe według tych nowomodnych kryteriów, czyli PII uważane są wszystkie dane, które pozwalają na określenie kim użytkownik jest, lub skontaktować się z nim. Mając do ogarnięcia serwis, który ma takie dane przetwarzać nie brał bym się za to bez prawnika, czy innego zioma od RODO, bo potencjalne kary są dotkliwe.
Technicznie - skorzystałbym z gotowej usługi do uwierzytelniania użytkowników, takiej jak FireBase, czy Auth0. Wypychasz w ten sposób sporą część roboty i ryzyka poza własny scope i pozostaje ci poprawne interpretowanie JWT, co też ciężko schrzanić mając gotowe biblioteki. Oczywiście podstawa to szyfrowanie danych in transit and at rest. Czyli całość ruchu przez SSL + szyfrowanie bazy danych. Ja szedłbym w chmurę, bo tam masz usługi zarządzane, więc znowu odpada ci odpowiedzialność za prawidłowe skonfigurowanie serwera pod DB, czy przygotowanie obrazu do node'a w k8s. W sensie - jak wyciekną dane, a to ty nie wrzuciłeś poprawek systemu, to twoja wina. Jak jest to odpowiedzialność dostawcy usług chmurowych, to jego.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Poznań
  • Postów:8769
4

@piotrpo: tak technicznie rzecz biorąc to nie do końca masz rację.
Jeśli ja jestem Twoim klientem, Ty trzymasz dane na jakimś AWS czy czymkolwiek innym, a następnie (w wyniku błędu po stronie AWS) moje dane wyciekną, to ja (oraz różne instytucje) się do Ciebie zgłaszają z pretensjami. Bo mnie średnio interesuje, kto dał ciała - ja moje dane powierzyłem Tobie i to od Ciebie one wypłynęły. To jest podobnie jak z remontem - zamawiasz budowlańca do remontu łazienki, a on bierze podwykonawcę od hydrauliki. I jak ten hydraulik coś spieprzy i chata się zaleje, to raczej nie przyjmiesz od budowlańca wyjaśnień w stylu "ale to nie ja, tylko człowiek robiący dla mnie hydraulikę, więc sam go sobie ścigaj".

Co najwyżej fakt, że wyciek danych nie jest z Twojej winy, ale z powodu np. tego nieszczęsnego AWS może mieć wpływ na łagodniejszy wymiar kary, a także masz możliwość odbicia piłeczki i domagania się od AWS pokrycia szkód, które z ich winy poniosłeś. Tymi szkodami mogą właśnie być kary, które musiałeś zapłacić, uszczerbek na wizerunku, chwilowy przestój itp.


piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 15 godzin
  • Postów:3277
0

@cerrato Masz rację - klient zgłasza się do ciebie, ty zgłaszasz się do urzędu odpowiedzialnego za ochronę danych, różnica jest dalej. Np. z takim Auth0 możesz podpisać umowę z przeniesieniem odpowiedzialności za część, która oni obsługują. Jak pokazują przykłady implementacji, przechowywanie haseł w sposób bezpieczny też nie jest takie uber oczywiste dla wszystkich i wygodniej powierzyć to komuś, kto nie będzie ich trzymał czystym tekstem w bazie - nie można schrzanić czegoś, czego nie robisz. Jeżeli uda ci się pozbyć wszystkiego co może wyciec z własnych serwisów, to z automatu odpada ci tłumaczenie się, że coś wyciekło, podobnie jak okresowe przeglądy systemu pod kątem zakresu przetwarzania danych. Czy masz powód, czy usuwasz je jak przestają być potrzebne (powodzenia...), czy użytkownik ma prawo wglądu i korekty, czy właściwie chronisz je przed utratą. Dlatego chmura i usługi zarządzalne są tak wygodne - nie potrzebujesz armii ludków od wgrywania poprawek, konfiguracji bazy danych, hardeningów, nethost scannów, utrzymywania klastra pod kontenery. Oczywiście nadal odpowiadasz za wszystko, ale że mało w tym wszystkim robisz, to realnie mniej zje...psujesz i za mniej odpowiadasz. Jasne, że nadal da się wystawić niezabezpieczony endpoint GET ./users/all, albo umożliwić dostęp do DB z całej sieci, bo nie było wiadomo jak konkretnie ustawić tego firewalla, ale też nie przesadzajmy - jeżeli masz o bezpieczeństwie chociaż podstawowe pojęcie to tego nie zrobisz. Czyli podsumowując, na podstawie mojego skromnego doświadczenia - wszystko co "moje" do kontenerów, żadnych VM'ek, bazy kolejki, cache, AIM, WAF do usług zarządzalnych. Problem pojawia się dopiero jak przechowujesz naprawdę poufne dane, bo do niedawna chmura była wyklęta, ale to też się zmieniło w dużej mierze i na poważniejszych rynkach masz już jakieś government cloud.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Poznań
  • Postów:8769
2

Jeżeli uda ci się pozbyć wszystkiego co może wyciec z własnych serwisów, to z automatu odpada ci tłumaczenie się, że coś wyciekło

No właśnie nie - bo nadal to Twoja usługa, Twoja aplikacja. To, czy to wyciekło z serwera w Twoim pokoju, z wykupionego VPS czy z jakiejś chmury to jest sprawa wtórna. Najważniejsze jest to, że ja - jako klient, wykupiłem u Ciebie jakąś usługę, przekazałem Tobie swoje dane, a teraz one latają po internecie. I mnie - jako klienta - nie interesuje, czy to skopałeś Ty, czy jakiś Twój podwykonawca, firma od serwerów czy syn kuzyna sąsiada. Ja dałem Tobie moje dane, a teraz jest wyciek - więc ja mam do Ciebie pretensje. A Ty możesz co najwyżej takie same pretensje mieć do operatora chmury, co nie zmienia faktu, że tymi danymi Ty zarządzałeś, Ty je ode mnie pobrałeś, Ty jesteś administratorem i Ty za nie odpowiadasz.


piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 15 godzin
  • Postów:3277
0

Ale mnie, jako dostawcę usługi mało obchodzi co ty (jako użytkownik) myślisz. Moim celem jest uniknięcie kary w wysokości iluś tam procent rocznych przychodów nałożonych przez regulatora. Jeżeli masz umowę z dostawcą usług, że on odpowiada za utrzymanie bezpieczeństwa jakiejś usługi (np. bazy danych), to pokazujesz tę umowę regulatorowi i zaczyna on ścigać np. Amazona a nie ciebie.

cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Poznań
  • Postów:8769
1

A kto jest administratorem danych - Ty, czy tamta firma?


piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 15 godzin
  • Postów:3277
0

Oczywiście ja i to do mnie przyjdzie regulator z batem. Ale mam dobre papiery, żeby wykazać należytą staranność. Te dane wyciekają przez jakiś ludzki błąd. Wszystko co piszę wyżej ma na celu powiedzenie regulatorowi, że owszem, jest mi przykro, ale tu mam usługę, której dostawca stwierdza, że ma działać, a nie zadziałała.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)