Mam zamiar rozpocząć czteroletni stopień bezpieczeństwa informacji w Purdue. Stopień nie wymaga żadnych kursów programowania. Tak więc jedyny raz, kiedy będę mógł to zrobić, będzie okazjonalny. Więc większość mojej nauki będzie odbywać się na własną rękę. Na początku mojego liceum postanowiłem całkowicie przejść na Linuksa. Do tej pory uczyłem się trochę o Linuksie i bezpieczeństwie. Uważam jednak, że dla mnie ważne będzie również nauczenie się kilku języków programowania.
Zasadniczo planuję nauczyć się programować równolegle z nauką korzystania z Vima. Więc najprawdopodobniej będzie to powolny proces. W końcu myślę, że będzie warto. Jak powiedziałem, zajmę się bezpieczeństwem, więc będę głównie tworzył aplikacje związane z bezpieczeństwem, z których większość dotyczy sieci. Chciałbym również zacząć tworzyć aplikacje na Androida, ale będzie to później.
Powiedziawszy to, mam kilka pomysłów. Myślałem o rozpoczęciu pracy z JavaScriptem, ponieważ jest on wieloplatformowy i widziałem go wcześniej sugerowany. Dużo słyszałem także o Ruby lub mogłem pójść naturalną ścieżką Linuksa z C. W jakim kierunku powinienem iść?
Przekonasz się, że wszyscy będą po prostu polecać swój ulubiony język. Moim ulubionym językiem jest Perl, więc to właśnie polecam. :) Jednak poza moimi osobistymi preferencjami istnieje kilka wspaniałych powodów, dla których warto rozważyć użycie perla:
Po pierwsze, perl to wspaniały język ogólnego przeznaczenia. Łatwo jest zacząć w Perlu, pisząc proste skrypty, aby wykonywać te same czynności, co w skryptach powłoki, np. Manipulować plikami i podejmować decyzje na podstawie danych wprowadzonych przez użytkownika. Zapewnia to bardzo łatwe i stopniowe wprowadzenie do ogólnych pomysłów programowania. Perl istnieje już od dłuższego czasu, więc na początek jest mnóstwo zasobów (książek i stron internetowych).
Po drugie, perl jest niezwykle potężnym i ekspresyjnym językiem, który obsługuje wszystkie nowoczesne funkcje programowania. Używam go od ponad piętnastu lat i wciąż uczę się nowych sposobów wydajniejszego działania. Na przykład, jeśli chcesz eksplorować programowanie obiektowe, Perl ma to (szczególnie poprzez Moose ).
Po trzecie, perl ma prawie nieskończoną moc i elastyczność swojego oficjalnego repozytorium dodatków, CPAN . Na przykład, aby podążać za ideą pisania oprogramowania zabezpieczającego, powiedz, że chcesz opracować niestandardowy skaner bezpieczeństwa sieciowego. Zamiast pisać to wszystko sam, możesz zacząć od użycia NMAP :: Scanner jako silnika skanowania, a następnie napisać własne poprawki i ulepszenia.
Wreszcie, jeśli chcesz poznać programowanie sieciowe, Perl też to ma. Jednym z popularnych nowoczesnych sposobów pisania oprogramowania sieciowego w Perlu jest Catalyst , który zapewnia nowoczesną platformę internetową MVC do szybkiego tworzenia dowolnej aplikacji internetowej.
Podsumowując, zaletą perla jest to, że pozwala on na rozpoczęcie pisania małych skryptów i programów wiersza poleceń i stopniowe przekształcanie się w pisanie w pełni funkcjonalnych nowoczesnych aplikacji. Oczywiście ceną tej elastyczności jest złożoność. Od ciebie zależy, aby uczyć się i uczyć, jak robić rzeczy we właściwy sposób, Perl nie egzekwuje dobrych praktyk, tak jak robią to inne języki. Osobiście podoba mi się ta wolność, szczególnie w połączeniu ze wszystkimi wspaniałymi zasobami w sieci do nauki używania perla.
źródło
Trzy języki zapewnią ci dobrą pozycję. W kolejności malejącej ważności (tzn. Pierwsza jest najważniejsza):
źródło
script language
, takiego jakpython
lubPHP
.Powinieneś nauczyć się kilku języków. Sugerowałbym zacząć od Pythona. Jest powszechnie zalecane, ponieważ jest łatwy do nauczenia i bardzo przydatny, wiele doskonałych materiałów do samodzielnej nauki jest dostępnych za darmo i, jak sądzę, jest szeroko stosowany przez specjalistów ds. Bezpieczeństwa IT. Prawie za każdym razem, gdy widzę, że specjaliści od bezpieczeństwa publikują kod demonstracyjny, jest to Python.
źródło
Czy jestem jedyną osobą, która myśli OMG !!!! w tym momencie?
Tak bym powiedział. Chociaż tak naprawdę nie spodziewasz się, że staniesz się biegłym programistą, prawdopodobnie potrzebujesz umiejętności wymaganych do symulacji / odtwarzania ataków i zrozumienia, jak działa proces programowania. Będziesz także potrzebował umiejętności analizy danych i wydobywania informacji ze źródeł zbiorczych (takich jak logi). JimB wspomniał o bashu - i chociaż bez wątpienia będziesz go używać - nauczenie się podstawowych elementów zajmuje tylko kilka godzin. W rzeczywistości jedynym miejscem, w którym możesz zobaczyć bash, jest system Linux - ale inne powłoki są bardzo podobne.
Polecam naukę awk i / lub Perla do kruszenia danych. Nie przejmuj się jakimkolwiek wymogiem zaznaczenia pola zorientowanego obiektowo - ale polecam również spojrzenie na nieprocesowe języki.
Nauka języka C udostępnia także wiele informacji o tym, jak kod zmienia się w program wykonywalny (kompilacja to tylko jeden krok w bardzo złożonym procesie).
Oczywistym wyborem dla osób zainteresowanych rozwojem Androida / urządzeń mobilnych byłaby java - ale java bardzo stara się izolować programistę przed koniecznością radzenia sobie z realiami działania i protokołami - z mojego doświadczenia wynika, że to tutaj masz problemy z bezpieczeństwem w Javie aplikacje. tzn. może pomóc Ci osiągnąć swój ostateczny cel i będzie dobrze wyglądać w twoim CV, ale nie oczekuj, że nauka języka Java znacznie uzupełni Twoją wiedzę na temat bezpieczeństwa.
źródło
Moja rada:
bash
(i podobne) nie są językami programowania ogólnego przeznaczenia. Chociaż możliwe jest wykonanie skomplikowanych skryptówbash
, nie jest to najlepszy sposób na naukę programowania w ogóle. Jest to najbardziej naturalny sposób na wykonywanie zadań związanych z administrowaniem systemami, które dotyczą głównie wykonywania innych programów, obsługi plików danych i katalogów oraz zbierania danych wejściowych i wyjściowych do nich. Jeślibash
jest to młotek, zarezerwuj go na problemy, które naprawdę wyglądają jak gwoździe. Nauka robienia czegokolwiek, co nie jest trywialne,bash
będzie znacznie łatwiejsza, jeśli nauczysz się bardzo małych podzbiorówsed
iawk
(ponieważ manipulowanie ciągamibash
jest w dużej mierze inspirowane składnią podobnych operacji w tych „małych” językach).Polecam lekturę tekstu wprowadzającego w sprawie C i spędzić trochę czasu uruchamiając
strace
iltrace
poleceń na kilka prostych poleceń użytkowych jakls
imkdir
i/bin/echo
itd. (W rzeczywistości te dni Sugerujęltrace -S
zamiaststrace
ale wypadów do wyjścia z obu komend i doltrace
wyjścia jak zwiększona przez-S
opcją będzie niezwykle edukacyjnych).C jest podstawowym językiem programowania, w którym napisane jest jądro Linuksa i GNU libc. (Małe części są w zespole). Prawie wszystkie programy w systemie Linux (lub innym systemie podobnym do UNIX) są połączone z bibliotekami C (libc). Główne interpretery Perla i Pythona (i większość innych języków skryptowych) są również napisane w C. Programy te (jądro, wspólne biblioteki systemowe i różne interpretery języków skryptowych) są napisane przez programistów C, na ich projekt i cechy mają duży wpływ przez ich podstawowe wdrożenia. Zatem głębsze zrozumienie któregokolwiek z nich ostatecznie wiąże się ze zrozumieniem C. Nie musisz nic wiedzieć o C ++ ani Javie, aby zrozumieć programowanie na tym poziomie. (Każda z nich może być interesująca i niezbędna sama w sobie w zależności od twojej kariery zawodowej,
Jeśli więc zgadzasz się z moimi przesłankami, sprowadziliśmy to do wyboru między Perlem a Pythonem.
Tutaj zaczynają się prawdziwe wojny płomieniowe.
Radzę najpierw skupić się na Pythonie (2.x). Python ma stosunkowo prostą i spójną składnię. Możesz nauczyć się podstaw składni Pythona w ciągu kilku godzin i to jest ogromna większość składni, jaką kiedykolwiek spotkasz. Istnieje tylko kilka funkcji (wyrazy ze spisu, wyrażenia generatora, dekoratory), które są pomarszczeniem podstawowej składni. Tak więc większość twojego wysiłku w nauce Python zostanie poświęcona nauce obszernych bibliotek standardowych i próbowaniu znalezienia „najlepszego” sposobu ich używania (i ustaleniu, jakie są szczególne zestawy wyjątków, które warto obsługiwać, aby Twoje programy były niezawodne) i, co najważniejsze, w nauce podstawowych pojęć.
Myślę, że rozbudowane biblioteki Pythona i stosunkowo prosta składnia mają dwie wyraźne wady.
Po pierwsze, kiedy uczysz się, jak robić rzeczy na bardzo wysokim poziomie w Pythonie, możesz pomyśleć, że musisz pracować na niższym poziomie, aby być nudnym. Tam, gdzie pracuję, Perl jest standardem. Prototypuję swoją pracę w Pythonie, gdzie wiem, że mogę sprawić, by działała o wiele szybciej i niezawodnie niż w Perlu; potem boję się, że muszę przejść i przenieść go do Perla dla moich kolegów. (Byłem dość dobry w Perlu przez wiele lat, zanim użyłem Pythona --- więc nie jest to kwestia zwykłej znajomości).
Inną wadą jest to, że czasami trudno jest znaleźć najwyższy poziom sposobu wykonania danego zadania w Pythonie. Na przykład, aby pobrać stronę internetową, możesz początkowo spróbować zrobić to z gniazdami niskiego poziomu ... które będą działać. Powieliłbyś jednak sporo kodu, który już możesz znaleźć, w tym w modułach
urllib
i / luburllib2
. Sam fakt, że standardowe biblioteki, począwszy od wersji 2.7.1, zawierają obie te cechy, jest moim zdaniem. Tam, gdzie to możliwe, opiekunowie Pythona w przejrzysty sposób rozszerzają starsze moduły i interfejsy API; jednak istnieją dziesiątki przypadków, w których Python zachowuje dwa lub trzy moduły, w których przezroczyste rozszerzenie z jakiegoś powodu nie było możliwe. (Inny przykład można spojrzeć na opcje do analizowania opcje wiersza poleceń:argparse
,optparse
, igetopt
. Pisanie programów przy użyciugetopt
(najstarszego z nich) jest niewielkie . W przypadku bardzo prostych narzędzi z kilkoma opcjami i sztywną konwencją wywoływania (używanych na przykład przez niewielką grupę osób), nie ma nic złego w chodzeniu nadsys.argv
sobą. Jednak zwykle warto uważnie przeczytać dokumentację i podążać za linkami u dołu starszych lub niższych modułów, które opisują dostępne funkcje nowszych lub wyższych poziomów.Moja rada opiera się na mojej opinii, że chcesz skupić się na głębszych pojęciach i nie musisz poświęcać dużo czasu i wysiłku na problemy składniowe i specyficzne dla języka. Zrozumienie, kiedy należy użyć podprocesu, w porównaniu do wątku lub funkcji wieloprocesorowych zawartych w Pythonie, ma stosunkowo niewiele wspólnego z językiem i wszystko, co dotyczy biegłości programistycznej niezależnie od języka. (W punkcie, w którym można zrozumieć argumenty dotyczące modelu sterowanego zdarzeniami Twisted przez porównanie z wątkami i wieloprocesowością, prawdopodobnie opanujesz Python i będziesz gotowy do programowania w dowolnym języku).
Argument kontrpracy dla Perla jest prosty i praktyczny. Istnieje jeszcze kilka innych miejsc pracy, które będą wymagać od Perla umiejętności. Perl jest potężnym językiem i ma niezwykle rozbudowane biblioteki. (Rdzeń Perla dystrybuowany z większością systemów Linux obejmuje mniejszy zakres funkcjonalności niż standardowe biblioteki Pythona; zakłada się, że zainstalujesz znaczną liczbę dodatkowych pakietów z twojej dystrybucji lub poprzez CPAN --- Comprehensive Perl Archive Sieć). (Dla kontrastu jest mniej modułów i pakietów Python, które muszę pobrać osobno ... są one dostępne z PyPI --- Indeks pakietów Python).
Jeśli więc nauczysz się Perla, będziesz miał dużą szansę na znalezienie pracy, szczególnie pracy sysadmin, w krótkim okresie. Jednak składnia Perla jest… cóż… słowami niektórych własnych entuzjastów… „patologicznie eklektyczna!” Perl może być bardzo zwięzły, a jego kod jest wypełniony sporą interpunkcją. Ci, którzy go uwielbiają, będą bez końca argumentować, że jest to „łatwe” i ma doskonały sens --- i będą mieli nieograniczone możliwości robienia tego na forach wypełnionych nieporozumieniami na temat dokładnej interpretacji danego fragmentu kodu. Składnia i język używany w dokumentacji oraz przez osoby, które wspierają ją na forach publicznych, są dopracowane do tego stopnia, że można włożyć znaczny wysiłek, aby się ich nauczyć.
Pamiętajcie, że powyższy komentarz jest subiektywny i stronniczy. Możliwe, że wypróbujesz Perla i zauważysz, że jego składnia jest intuicyjna i przyjemna. Jeśli tak, to więcej mocy dla ciebie. Jednak osobiście uważam, że moje pojmowanie osobliwości Perla rozpada się bardzo szybko. Podstawy, które zachowuję, ale uważam, że jest to trudność, ilekroć muszę przełączyć się z powrotem na więcej niż kilka wierszy kodu.
Istnieje wiele innych języków do nauki, Java, Lisp i Scheme, TCL, Scala i tak dalej. Proponuję jednak zacząć od takiego, który oferuje najlepszą równowagę między użytecznością a prostotą.
źródło
W świecie Linuxa powinieneś znać dwie podstawowe rzeczy:
Regular Expression
. To jest konieczność.RegEx
to uniwersalny „język”, gdy już umiesz używać wyrażeń regularnych, twoje życie będzie znacznie łatwiejsze :-)quick & dirty
” jest bardzo powszechne w świecie Linuksa. Jeśli możesz wykonać swoją pracę, bez względu na to, jak brzydkie jest twoje rozwiązanie, musisz ją wykonać.Tak więc, jeśli chcesz nauczyć się języka w Linuksie, to NALEŻY wybrać
script language
, podobniepython
,PHP
albo nawetbash scripting
.I polecam to
PHP
. To proste i brzydkie. Posiada szczegółową instrukcję online . Ma dobreRegEx
wsparcie. To wszystko.źródło
Możesz wykonać prawie każde zadanie w prawie każdym języku, więc właściwy wybór zależy w dużej mierze od rozwiązania problemu.
Zdecydowanie warto znać języki z następujących kategorii:
Postaram się nauczyć C / C ++, ponieważ pozwala to na uszkodzenie stosu i bezpośredni dostęp do pamięci. Jest to ważne, jeśli chcesz eksperymentować z problemami bezpieczeństwa. Wiele języków ma składnię podobną do C (w tym JavaScript), więc jest to dobra trampolina.
Jeśli dużo pracujesz w powłoce, którą, jak sądzę, uczysz się w vimie, skończysz uczyć się podstawowych skryptów powłoki jako efekt uboczny. UNIX Power Tools to dobra książka do nauki bardziej zaawansowanych rzeczy; Nie wiem czy nadal jest publikowany.
PHP może być również dobrym językiem do nauki; Główną zaletą, jaką oferuje nowym programistom, jest to, że wbudowanych jest wiele funkcji, a nie biblioteka, do której należy utworzyć łącze (co nie jest złożonym zadaniem). Z tego powodu przeglądanie głównych dokumentów nauczy Cię o wielu rzeczach.
źródło
Po pierwsze, kilka negatywnych porad:
Nie rób tego. Znajdź edytor, który jest naprawdę wygodny. Nauka zarówno języka, jak i edytora jest trzy razy trudniejsza niż nauka ich w kolejności (oczywiście edytor powinien iść pierwszy :-))
Aplikacje bezpieczeństwa związane z siecią? C nie jest tutaj żadnym wyborem. Będziesz musiał uzyskać dostęp do sieci na poziomie interfejsu API systemu, co oznacza, że C jest właściwą drogą. Oczywiście nie oznacza to, że wszystko musi znajdować się w C - biblioteka C +
$favorite-high-level-language
opakowanie może zaoszczędzić Ci problemów związanych z C w częściach, które nie potrzebują C.Założę się, że zostało to zasugerowane w kontekście innym niż twój. JavaScript ma swoje mocne strony, ale jeszcze nie jest dobrym językiem ogólnego przeznaczenia. JS nie ma standardowych bibliotek porównywalnych z bibliotekami dostępnymi dla C, Python, Perl, Ruby, Java i firmy.
Mówiąc o
$favorite-high-level-language
- moja rada to iść z Pythonem. Ładnie współpracuje z C, jest dostarczany z wieloma przydatnymi bibliotekami i ma znacznie więcej bibliotek dostępnych jako dodatki.źródło
Uczenie się Javascript nie ma nic złego, ale działa tylko w przeglądarce, więc programowanie będzie ograniczone do aplikacji związanych ze stronami internetowymi.
Prawdopodobnie jest tyle odpowiedzi na „co to jest dobry język programowania na początek”, ile jest języków. Moją wartością jest to, że możesz zrobić coś gorszego niż zacząć od podstawowego skryptu powłoki, po prostu widząc, co możesz zrobić, aby zautomatyzować zadania bez użycia niczego poza powłoką, a następnie rozszerzyć to za pomocą Perla lub podobnego języka, który wyrósł z potrzeby robienia zadania bardziej złożone niż jest w stanie wykonać powłoka, a jeśli jesteś naprawdę zainteresowany, zajmie to tylko kilka tygodni, zacznij używać C lub pochodnej.
źródło
Moje rekomendacje? Hmmm. Cóż, być może będziesz musiał zdecydować na bieżąco. Aby uzyskać zdrowy, dobrze zaokrąglony zasięg, możesz wybrać zwykłą trasę CS stopni, może nie w tej kolejności.
(1) C / C ++ - Możesz pobrać rzeczy zorientowane obiektowo, a przynajmniej będziesz próbował. C ++ to „profesjonalny” standard. (2) Montaż (tylko na chwilę - pomoże ci zrozumieć prawdziwe działanie procesora, pamięci itp. - nie musisz go ożenić.) (3) Python / Perl / Bash - zdobądź je języki skryptowe w dół, będą najbardziej przydatne dla twojego poziomu Linuxa (4) PHP / Ruby, MySQL i HTML - Po prostu włącz programowanie w sieci! Zrozumiesz cały proces interakcji serwer-klient, kolejny poziom informatyki.
Potrzebujesz pomocnych pojęć? AI, sieci neuronowe. To powinno Cię zaokrąglić.
Możesz wybrać jedną z tych czynności lub dotknąć ich wszystkich. Mój język? Wszystkie, w razie potrzeby, ale programuję od 1984 r., Mam dyplom z CS, gry pisane i wszelkiego rodzaju aplikacje na systemy wbudowane. Tak robię. Musisz dowiedzieć się, kim jesteś i co robisz. Tylko upewnij się, że dobrze się bawisz.
Cieszyć się!
źródło
oops, źle odczytane bezpieczeństwo informacji dla systemów informacyjnych ... no cóż, większość z nich nadal obowiązuje
Jawa
Szczerze mówiąc, jeśli pracujesz w Linuksie i zaczynasz kurs programowania w Javie, a następnie może kontynuujesz kilka kolejnych kursów programowania, inne narzędzia, takie jak Bash sed / awk itp., Powinny się w pewnym sensie na miejscu. Jeśli naprawdę wejdziesz do systemów, możesz później odebrać trochę C, ale nie powiedziałbym, że jest to bardzo pożądane i nawet nie powiedziałbym, że jest to wymagane, aby być facetem systemowym - chyba że naprawdę interesujesz się wewnętrznymi.
YMMV
źródło