Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 02.06.2008 o 16:23, penny napisał:

to trochę tak jakbym ja sobie wymyślił własny format obrazków i stwierdził, że wyświetlanie ich powinno się odbywać przez znacznik, powiedzmy <pms />

Jest jednak znacząca różnica. Aplety nie pozwalają na zapis czegokolwiek w komputerze (i mają też kilka innych zabezpieczeń sieciowych), a więc można ich spokojnie używać bez obawy o bezpieczeństwo bez żadnych podpisów, certyfikatów, wyświetlania ostrzeżeń i innych pierdół niezbędnych dla pozostałych kompletnie niebezpiecznych formatów programów. Np. każdy program flash może Ci zmazać twardziela ot tak sobie - dla jaj, a więc zabezpieczenia przed odpaleniem powinny istnieć. Applet, choćby nie wiadomo co wyczyniał nie namiesza nic poza własną pamięcią i przydzielonym kawałkiem ekranu.
To tak jakbyś pakował do jednego wora wszystkie modele samochodów i jeden samolot.

Dnia 02.06.2008 o 16:23, penny napisał:

wprowadzenie ujednoliconego <object /> ma więc sens. podobny problem jest przecież
z flashem

Flash, nie ma *żadnych* zabezpieczeń - przed niczym. Poza tym, że jest też wykonywany przez interpreter, to jego podobieństwa do Javy na tym się kończą. Już nie wspominając o rąbanych "flash playerach w nowej wersji", które próbują się ściągnąć przy każdej okazji.

Dnia 02.06.2008 o 16:23, penny napisał:

o ile dobrze kojarzę znacznika <embed /> nigdy nie było w specyfikacji html

Tego znacznika używa Firefox. Też nie wiem dlaczego.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 13:39, Olamagato napisał:

/.../


Jeszcze pytanie dotyczące programowania: trzeba umieć dobrze matmę? Czy jest to niezbędne? Pytam, bo może wystarczy opanować jakiś język (opanować jakieś tam składnie itp.) nie będąc matematykiem ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 16:08, Baneb14de napisał:

Jeszcze pytanie dotyczące programowania: trzeba umieć dobrze matmę? Czy jest to niezbędne?

Nie. Do zbudowania działającego programu wystarczy stosunkowo nieduża znajomość matmy. Ale trzeba liczyć się z tym, że za programy słabo działające (a to jest najczęściej skutkiem) nikt nie zapłaci ani grosza w żadnej formie. Wtedy jest to po prostu hobby. Ani lepsze, ani gorsze od innych.
W każdym razie większość komercyjnych programów zawiera w sobie solidny kawał matematyki. Tak więc co tu więcej mówić... :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

nie chodzi o to co robi dany obiekt i czy jest groźny lub nie, ale o samą zasadę. nic więcej. grafikę wyświetlasz znacznikiem <img /> a inne obiekty różnej maści znacznikiem <object /> z odpowiednimi parametrami. i od tego jest specyfikacja żeby to regulować, a nie żeby była samowolka. jakoś silverlight może być wyświetlany przez <object /> czemu więc przeszkadza ci to z appletami? zresztą, czy to ja tą specyfikację tworzyłem? doszliśmy również do tego, że również nie robił tego ms, ani tym bardziej sun ;)

myślę więc, że już można by już skończyć ten OT :) trochę nie ten wątek na takie dywagacje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 16:08, Baneb14de napisał:

Jeszcze pytanie dotyczące programowania: trzeba umieć dobrze matmę? Czy jest to niezbędne?
Pytam, bo może wystarczy opanować jakiś język (opanować jakieś tam składnie itp.) nie
będąc matematykiem ;)

Nie trzeba. Znajomość kolejności wykonywania działań jednak ułatwia sprawę ;D. W zasadzie nic innego się nie przydaje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 16:08, Baneb14de napisał:

> /.../

Jeszcze pytanie dotyczące programowania: trzeba umieć dobrze matmę? Czy jest to niezbędne?
Pytam, bo może wystarczy opanować jakiś język (opanować jakieś tam składnie itp.) nie
będąc matematykiem ;)

da się bez matmy, ale wiele rzeczy bez jej zrozumienia to droga przez mękę. jeśli chcesz mieć cokolwiek wspólnego z przetwarzaniem obrazu, nawet zwykłe 2D w dowolnym programie, którego interfejs to coś więcej niż przyciski i pola tekstowe, to już matma zaczyna być przydatna.
potrzebna też jest do oceny złożoności obliczeniowej twoich algorytmów i jeszcze do paru innych ''pierdół'' ;)
sam po prostu nie lubię matmy, ale jak trzeba to potrafię sporo z niej zrozumieć po przejrzeniu jakiejś ''dokumentacji'' na dany temat ;)
w uproszczeniu - program do faktur zrobisz bez matmy, ale wykresu sprzedaży sam bez niej nie narysujesz. nawet obrócenie prostokąta na płaszczyźnie, w zależności od ruchu myszką może wtedy być trudne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 16:26, penny napisał:

da się bez matmy, ale wiele rzeczy bez jej zrozumienia to droga przez mękę. jeśli chcesz
mieć cokolwiek wspólnego z przetwarzaniem obrazu, nawet zwykłe 2D w dowolnym programie,
którego interfejs to coś więcej niż przyciski i pola tekstowe, to już matma zaczyna być
przydatna.

To można równie dobrze powiedzieć, że niezbędna jest fizyka (bo jak zasymulować rzut piłką w grze, jak obliczyć prędość rakiety i jej położenie?). Albo znajomość metody chromatografii gazowej, żeby napisać oprogramowanie dla chromatografu.
To oczywiste, że zawsze trzeba mieć pojęcie o dziedzinie w której nasz program będzie używany. Ale do programowania jako takiego maty nie potrzeba imo. Jasne, że jak komuś się zamarzy gra 3D to bez działań na macierzach i paru innych rzeczy sobie nie poradzi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 16:58, Vel Grozny napisał:

To można równie dobrze powiedzieć, że niezbędna jest fizyka (bo jak zasymulować rzut
piłką w grze, jak obliczyć prędość rakiety i jej położenie?). Albo znajomość metody chromatografii
gazowej, żeby napisać oprogramowanie dla chromatografu.
To oczywiste, że zawsze trzeba mieć pojęcie o dziedzinie w której nasz program będzie
używany. Ale do programowania jako takiego maty nie potrzeba imo. Jasne, że jak komuś
się zamarzy gra 3D to bez działań na macierzach i paru innych rzeczy sobie nie poradzi.

nie twierdzę przecież, że bez jakiś perwersyjnych metod numerycznych ani rusz :)
znajomość pewnych zagadnień po prostu ułatwia sprawę. analiza i dobór algorytmów to jedno (tutaj potrzeba trochę wiedzy matematycznej) i jest niezależne od tego jaki program piszesz. poza tym jak pisałem nawet przy 2D się przydaje. często interfejs programu to coś więcej niż przyciski i pola tekstowe a wtedy trzeba samemu dorobić jakieś kontrolki. jeśli tylko pojawi się konieczność obrotu czegokolwiek to trygonometria może okazać się bardziej niż pomocna ;) a to nie jest już tak mało prawdopodobne, szczególnie jeśli pisze się dużo i na zlecenie.
Wiadomo jednak że nikt nie będzie oczekiwał od ciebie wiedzy na poziomie inżyniera projektującego mosty :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 16:58, Vel Grozny napisał:

To można równie dobrze powiedzieć, że niezbędna jest fizyka (bo jak zasymulować rzut
piłką w grze, jak obliczyć prędość rakiety i jej położenie?).

Z wzorów znalezionych w stosownych podręcznikach/specyfikacji programu? Tylko te wzory trzeba przekształcić w algorytmy (czyli ciąg instrukcji możliwy do zakodowania), i tu kłania się matematyka. No chyba że chodzi o rakietę rzeczywistą, to wtedy od jej konstruktorów (bo trzeba będzie podebrać dane z systemu nawigacyjnego/czujników/żyroskopów/itp). Zwłaszcza że czasem ludzie liczą inaczej a komputery inaczej (chodzi mi o sposoby obliczenia danej rzeczy, bo wyniki naturalnie wychodzą te same)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 17:48, sig. napisał:

Z wzorów znalezionych w stosownych podręcznikach/specyfikacji programu? Tylko te wzory
trzeba przekształcić w algorytmy (czyli ciąg instrukcji możliwy do zakodowania), i tu
kłania się matematyka.

Hm... Nie bardzo wiem co masz na myśli. Znajduję wzór w podręczniku/specyfikacji i nie wiem gdzie jest problem natury matematycznej w zakodowaniu tego. Bo zwykłej znajomości zasad wykonywania działań nie uznaję za dobrą znajomość matematyki. Mógłbyś zilustrować to na przykładzie/wytłumaczyć bardziej?
Jeśli chodzi o obliczanie pochodnych/całek/logarytmów numrycznie to te metody też są opisane w odpowiednich źródłach.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie ma o czym mówić. Informatyka wykorzystuje matematykę podobnie jak chemia czy fizyka. Jako narzędzie. Komputer, to maszyna obliczeniowa, a więc jej zasadniczą częścią pracy są obliczenia - czy to będzie proste obliczenie wyskoku z pętli czy bardzo zaawansowany algorytm numeryczny. Bez matematyki, możemy pobawić się jakimś programem graficznym, tekstowym, czy multimedialnym. Praca tego ostatniego sprowadza się do przepchnięcia bajtów z jednego miejsca w drugie (np. do pamięci ekranu lub bufora dźwiękowego). I na tym chyba koniec bardziej ambitnych zastosowań bez żadnej znajomości matematyki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 17:59, Vel Grozny napisał:

Znajduję wzór w podręczniku/specyfikacji

Najpierw musisz wiedzieć, gdzie szukać, potem znaleźć, na końcu zrozumieć jak to działa, ewentualnie uwzględnić wszelkie zmiany spowodowane dyskretnym kodowaniem liczb itd.

Dnia 03.06.2008 o 17:59, Vel Grozny napisał:

i nie wiem gdzie jest problem natury matematycznej w zakodowaniu tego.

W umiejętności rozwiązywania zadań. Matematyka zasadniczo uczy sposobu podejścia do rozwiązywania napotykanych problemów - krótko mówiąc do rozkładania zagadek na czynniki pierwsze. Jako minimum potrzebna jest umiejętność przekształcania wyrażeń matematycznych i rozwiązywania równań. Inaczej nie będziesz potrafił z wzoru wyciągnąć potrzebnej wartości jakiejś zmiennej. Rozwiązywanie zadań "na literkach" jest tu szczególnie pożądane.
To oczywiście tylko podstawa matematyki, ale niezbędna.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 13:39, Olamagato napisał:

Jest jednak znacząca różnica. Aplety nie pozwalają na zapis czegokolwiek w
komputerze (i mają też kilka innych zabezpieczeń sieciowych), a więc można ich
spokojnie używać bez obawy o bezpieczeństwo bez żadnych podpisów,
certyfikatów, wyświetlania ostrzeżeń i innych pierdół niezbędnych dla pozostałych
kompletnie niebezpiecznych formatów programów.


Bzdura. Zerknij tutaj:
http://www-1.ibm.com/support/docview.wss?uid=swg21225628

Bug w implementacji java runtime environment może pozwolić na wykonanie kodu z uprawnieniami hostującego procesu tak jak w przypadku każdej innej maszyny wirtualnej (Flash jest maszyną wirtualną). Twierdzenie, że coś jest bezpieczne i że można tego bez obaw używać jest dalece posuniętą nieprawdą. To, że jakość kodu Flasha jest jaka jest nie zmienia faktu, że i JRE (od każdego producenta: Sun, IBM, MS,...) nie jest wolna od błędów i ma historię własnych usterek, których eksploatacja pozwala na wykonanie kodu.

To czy i jak to zagraża systemowi zależy głównie od sposobu hostowania wykonywanego kodu, uprawnień procesu hostującego, itd. Ilość wykrywanych i eksploatowanych usterek z kolei jest pochodną popularności rozwiązania. Złote lata apletów Javy na stronach WWW minęły więc i zainteresowanie grzebaniem w JRE zmalało. Flash jest dziś praktycznie niezbędny do przeglądania sieci, co zapewnia większą powierzchnię ataku i czyni go łakomym kąskiem dla hakerów.

Ale, wciąż, nie oznacza to, że Java jest bezpieczna. Tak samo nie jest bezpieczna jak nie jest bezpieczny Flash, JavaScript, silverlight czy dowolna inna kontrolka wykonywana na stronie. Tak samo żadna przeglądarka nie jest bezpieczna. Operowanie na absolutach (szczególnie takich jak "najlepszy" czy "bezpieczny") jest prawie zawsze błędne. Tak jest i w tym wypadku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 18:51, ConayR napisał:


Tak podchodzac do sprawy mozna wyeliminowac ze slownika slowo ''bezpieczny'' bo nic nie jest bezpiecznie.
Dziury sa wszedzie. Ale taki na przyklad ActiveX przy appletach Java to jak jazda rowerem pod prad na autostradzie z zamknietymi oczyma przy lezeniu na plazy ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 19:00, Volvox napisał:

> Bzdura. Zerknij tutaj:
> http://www-1.ibm.com/support/docview.wss?uid=swg21225628

Tak podchodzac do sprawy mozna wyeliminowac ze slownika slowo ''bezpieczny'' bo nic nie
jest bezpiecznie.
Dziury sa wszedzie. Ale taki na przyklad ActiveX przy appletach Java to jak jazda rowerem
pod prad na autostradzie z zamknietymi oczyma przy lezeniu na plazy ;)

zapomniałeś dodać niemieckiej autostradzie (prędkości maksymalnej na takowych nie mają).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 18:36, Olamagato napisał:

W umiejętności rozwiązywania zadań. Matematyka zasadniczo uczy sposobu podejścia do rozwiązywania
napotykanych problemów - krótko mówiąc do rozkładania zagadek na czynniki pierwsze. Jako
minimum potrzebna jest umiejętność przekształcania wyrażeń matematycznych i rozwiązywania
równań. Inaczej nie będziesz potrafił z wzoru wyciągnąć potrzebnej wartości jakiejś zmiennej.
Rozwiązywanie zadań "na literkach" jest tu szczególnie pożądane.
To oczywiście tylko podstawa matematyki, ale niezbędna.

Więc sprawa sprowadza się do opinii na temat co to jest dobra znajomość matematyki. Dla mnie to co podałeś - nie jest jej dobrą znajomością. To są podstawy (sam to przyznałeś) bez których raczej ciężko przejść podstawówkę.

Jakoś nie znając się na np. fraktalach byłem w stanie zakodować program, który rysował najpopularniejszy z nich (chyba Mandelbrota). Wystarczyło znaleźć prosty wzór (albo 2), żeby to zrobić.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 18:51, ConayR napisał:

Bug w implementacji java runtime environment może pozwolić na wykonanie kodu z uprawnieniami hostującego procesu tak jak w przypadku każdej innej maszyny wirtualnej (Flash jest maszyną wirtualną).

Bug w każdej maszynie wirtualnej jest niebezpieczny. Tyle, że do tego, aby "podłączyć" komp do botnetu w Javie potrzebny jest poważny bug w JRE, natomiast we flashu nie trzeba nic. Po prostu VM flasha wykona wszystko, co się skrypterowi wymyśli i będzie zapisane w kodzie. Natomiast kod javy nawet jeżeli będzie zawierał odpowiednie instrukcje dostępu do dysku i sieci, to nic nie da. Kod robiący coś z dyskiem nie wykona się. I tyle w kwestii bezpieczeństwa.

Dnia 03.06.2008 o 18:51, ConayR napisał:

Twierdzenie, że coś jest bezpieczne i że można tego bez obaw używać jest dalece posuniętą nieprawdą.

Najwyraźniej nie zrozumiałeś. Każde ściąganie kodu natywnego lub kodu umożliwiającego na dostęp do wszystkiego w kompie jest potencjalnie niebezpieczne. Tyle, że nie dotyczy to apletów Javy - bez zgody użytkownika same aplety są bezpieczne i można je ładować przy założeniu, że VM działa bezbłędnie.

Dnia 03.06.2008 o 18:51, ConayR napisał:

Operowanie na absolutach (szczególnie takich jak "najlepszy" czy "bezpieczny") jest prawie zawsze błędne.

Zgadza się. Dlatego podałem Ci założenia w jakich ośmielam się tak twierdzić. :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 20:00, Olamagato napisał:

Bug w każdej maszynie wirtualnej jest niebezpieczny. Tyle, że do tego, aby
"podłączyć" komp do botnetu w Javie potrzebny jest poważny bug w JRE


Tak samo poważny jak w każdej innej maszynie wirtualnej. Nie ma znaczenia w kontekście tej dyskusji co jest lepiej zakodowane a co gorzej (tym bardziej, że nie ma obiektywnej miary), ważne jest, że nieprawdą jest jakoby Java była bezpieczna.

Dnia 03.06.2008 o 20:00, Olamagato napisał:

Po prostu VM flasha wykona wszystko, co się skrypterowi wymyśli i będzie zapisane
w kodzie. Natomiast kod javy nawet jeżeli będzie zawierał odpowiednie instrukcje
dostępu do dysku i sieci, to nic nie da. Kod robiący coś z dyskiem nie wykona się.
I tyle w kwestii bezpieczeństwa.


Zarówno w Javie jak i we Flashu kod jest wciąż wykonywany z uprawnieniami procesu hostującego. Nie jest prawdą, że Flash może wszystko (chyba, że ktoś używa przeglądarki z pełnymi uprawnieniami administratora a we Flashu jest bug). Prawdą jest, że obecny model wykorzystywany do hostowania Flash Playera jest zwalony i nie przystaje do jego popularności, nie zmienia to jednak faktu, że Java hostowana jest na identycznych prawach. Wciąż zatem twierdzę, że teorię o większych uprawnieniach Flasha wyczarowałeś.

Dnia 03.06.2008 o 20:00, Olamagato napisał:

Najwyraźniej nie zrozumiałeś. Każde ściąganie kodu natywnego lub kodu umożliwiającego
na dostęp do wszystkiego w kompie jest potencjalnie niebezpieczne. Tyle, że nie dotyczy
to apletów Javy - bez zgody użytkownika same aplety są bezpieczne i można je ładować
przy założeniu, że VM działa bezbłędnie.


Po pierwsze: jest to zgubne założenie. Po drugie: byłbym wdzięczny gdybyś wyjaśnił wszystkim czytającym ten wątek (w tym mnie) dlaczego Twoim zdaniem applet Javy nie ma równoprawnego z hostującym procesem dostępu do zasobów systemowych (w tym dysku).

Flash pozwala Ci na odczytanie lokalnego pliku po zatwierdzeniu przez użytkownika odczytu w oknie dialogowym (Open...) i nie pozwala na zapis na maszynie na której uruchomiona jest przeglądarka. Jeśli jest we Flashu błąd, pewnie można utrzymać dostęp do dysku na prawach procesu hostującego.

Java zabrania niezauwfanym kontrolkom jakiegokolwiek dostępu do dysku. Zaufane kontrolki mają pełny dostęp do dysku na prawach procesu hostującego. Kontroka zaufana to kontrolka podpisana przez twórcę, który znajduje się w Twojej bazie zaufanych (trusted identities). Czyli jeśli raz zaufałeś Sunowi, wszystkie kontrolki podpisane ich certyfikatem mają pełen dostęp do Twojego dysku. Bez potwierdzania.

Odpowiedz proszę mi i czytającym ten wątek na pytanie: czy naprawdę uważasz Javę za bezpieczniejszą, skoro ufa całościowo raz zatwierdzonemu autorowi i daje mu prawa zapisu (których Flash nie posiada)?

Co do założeń jeszcze: jeśli jakieś stosujesz, stosuj je dla każdego na równi. Zakładając, że nie ma dziury we Flashu, Flash nie ma praw zapisu wcale i nie ma praw odczytu bez zgody użytkownika. Cały czas Twierdzisz, że Flash zapisuje jak chce - przy użyciu dziur? Pewnie tak. Ale, ponownie, stosuj jedną miarę dla wszystkich.


@Volvox: twierdzenie, że Java przy apletach ActiveX jest dziurawa jest absurdalne. Java jest hostowana w IE przy pomocy ActiveX. Poza tym, z ciekawości, wiesz na temat ActiveX coś ponad to, że każdy dzieciak na Internecie utożsama ActiveX ze złem? I jeszcze jedno: świat nie jest czarno-biały, między "bezpieczny" a "niebezpieczny" są odcienie pośrednie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 03.06.2008 o 23:37, ConayR napisał:

Zarówno w Javie jak i we Flashu kod jest wciąż wykonywany z uprawnieniami procesu hostującego.

Pod warunkiem, że mówisz o pełnoprawnym programie w Javie uruchamianym za pomocą np. JNLP tak jak tutaj:
http://java.sun.com/products/jfc/jws/SwingSet2.jnlp
http://java.sun.com/docs/books/tutorialJWS/uiswing/components/ex6/JWSFileChooserDemo.jnlp
https://swingset3.dev.java.net/

A nie mówisz o dużo bardziej bezpiecznych apletach wbudowanym w stronę html tak jak tutaj:
http://java.sun.com/products/jfc/jws/SwingSet2.jnlp
http://java.sun.com/products/plugin/1.5.0/demos/plugin/jfc/Java2D/Java2Demo.html
http://java.sun.com/products/plugin/1.5.0/demos/plugin/applets/Clock/example1.html

Szczególnie pierwsze linijki obu wersji przykładów (SwingSet2) pokazują ten sam kod działający jako samodzielny program oraz aplet, który nie ma możliwości zapisu na dysku. Zwróć uwagę na piąty przycisk na pasku narzędziowym (JFileChooserDemo), który w wersji jnlp nie działa, w wersji apletu w ogóle go nie ma (program wyłącza go wiedząc, że jest apletem bo i tak nie zadziała), a mogę Cię zapewnić, że po uruchomieniu tego samego kodu bezpośrednio z własnego dysku - opcja ta działa i wybiera pliki lokalne (podobnie jak zapisuje).

Dnia 03.06.2008 o 23:37, ConayR napisał:

Java hostowana jest na identycznych prawach.

Jak jednak widzisz fakty pokazują coś innego.

Dnia 03.06.2008 o 23:37, ConayR napisał:

> bez zgody użytkownika same aplety są bezpieczne i można je ładować przy założeniu, że VM działa bezbłędnie.
Po pierwsze: jest to zgubne założenie.

Zgubne czy nie zgubne bug w każdym natywnym kodzie jest po prostu niebezpieczny - tak samo jak bug w skrypcie flasha. Bug w kodzie apletu javy nie ma najmniejszego znaczenia - w żaden sposób nie zmniejszy bezpieczeństwa - najwyżej aplet nie będzie w ogóle działał.

Dnia 03.06.2008 o 23:37, ConayR napisał:

gdybyś wyjaśnił wszystkim czytającym ten wątek (w tym mnie) dlaczego Twoim zdaniem applet Javy nie ma równoprawnego z hostującym procesem dostępu do zasobów systemowych (w tym dysku).

Bo samo JRE nie pozwala uruchomić instrukcji kodu bajtowego, które są składnikiem operacji dyskowych oraz sieciowych (dla innego połączenia niż to z którego wczytano aplet). O ile wiem (choć może się mylę) flash player nie ma takiego mechanizmu. Jeżeli pozwalamy na wgranie i uruchomienie natywnej maszyny wirtualnej dla flasha, to każdy kod uruchamiany w tej maszynie wykona się zawsze.
To jest pokrótce zasadnicza różnica dla której wrzucanie apletów javy do jednego worka z obiektami innych pluginów nie jest dla mnie ok.

Dnia 03.06.2008 o 23:37, ConayR napisał:

Flash pozwala Ci na odczytanie lokalnego pliku po zatwierdzeniu przez użytkownika odczytu
w oknie dialogowym (Open...) i nie pozwala na zapis na maszynie na której uruchomiona jest przeglądarka.

Jeżeli tak, to znaczy, że coś się poprawiło w stosunku do tego co znałem.

Dnia 03.06.2008 o 23:37, ConayR napisał:

Kontroka zaufana to kontrolka podpisana przez twórcę, który znajduje się w Twojej bazie zaufanych (trusted identities).

Tak, ale nie jest to aplet, a normalna aplikacja - na przykład odpalana przez jnlp tak jak powyżej. A o ile pamiętam chodziło wyłącznie o kwestię tagu dla apletów Javy.
Jeżeli zaufałeś wydawcy, a wydawca podpisuje swoje programy, to już Twoja sprawa co się dzieje dalej.

Dnia 03.06.2008 o 23:37, ConayR napisał:

czy naprawdę uważasz Javę za bezpieczniejszą, skoro ufa całościowo raz zatwierdzonemu autorowi i daje mu prawa zapisu (których Flash nie posiada)?

Oczywiście, że pełnoprawne programy javy nie są bardziej bezpieczne niż kod we flashu. W obu wypadkach kod nie jest wykonywany przez procesor i podobnie trudno jest uruchomić swoją własną kopię jako inny proces (o ile jest to możliwe).
Natomiast wracając do kompletnie niezaufanych kontrolek flasha i javy - ta druga nie ma kompletnie żadnej możliwości ani utworzenia innego procesu, ani zapisu na dysku czegokolwiek. Pod warunkiem, że nie wykorzysta się jakiegoś exploita w maszynie wirtualnej.
Jeżeli tak jak napisałeś niezaufany kod flashowy również ma takie same ograniczenia (o których nie wiem bo dowiedziałem się od Ciebie), to oznaczałoby, że coś się poprawiło u flasha.

Dnia 03.06.2008 o 23:37, ConayR napisał:

Pewnie tak. Ale, ponownie, stosuj jedną miarę dla wszystkich.

OK, być może moja wiedza na temat flasha jest przestarzała.

Dnia 03.06.2008 o 23:37, ConayR napisał:

Java jest hostowana w IE przy pomocy ActiveX.

Wtrącę się: Tak rzeczywiście się dzieje, ale jest to wyłącznie wina Microsoftu. W momencie w którym z IE usunięto JVM jedyny sposób na jaki wpadła niezależna firma JavaSoft było stworzenie kontrolki (wtedy) OLE, która była rozszerzeniem przeglądarki dokładnie tak samo działającym jak niebezpieczne ActiveX. Różnica polegała jednak na tym, że kontrolka dowolnego ActiveX wczytywała jakiś kod (np. nieznany, niepodpisany - na początku tej istnienia technologii nie było żadnych podpisów) bezpośrednio z sieci i przekazywała do niej sterowanie - na przykład do kodu wirusa, który był taką kontrolką.
Natomiast kontrolka ActiveX Javy próbowała uruchomić lokalnie zainstalowaną w komputerze JRE, która wtedy uruchamiała się jako plugin do przeglądarki i uruchamiała aplet z wszelkimi ograniczeniami. Ostatnie wersje takiej kontrolki - podobnie jak kontrolki flashowe pozwalają przejść na stronę z najnowszą wersją JRE jeżeli lokalnie zainstalowana maszyna wirtualna nie istnieje lub jest zbyt stara.
A dlaczego tak postąpiono? Ponieważ gdyby Microsoft spróbował i tutaj jakoś zablokować uruchamianie Javy na jego przeglądarce IE, to musiałby tym samym usunąc również możliwośc uruchamiania zarówno swoich kontrolek ActiveX, jak i wszelkich innych rozszerzeń swojej przeglądarki. A na taki ruch nie mógłby się zdecydować nie ograniczając drastycznie jej funkcjonalności (automatycznie przegrywając z konkurencją innych przeglądarek i likwidując możliwość uruchamiania Windows Update).

I tutaj dołożę kwestię taga EMBED w firefoxie. Być może FF w ogóle nie wczytuje kontrolki ActiveX w kodzie natywnym (bo o ile wiem ActiveX dla tej przeglądarki w ogóle nie istnieje - jest ignorowane), lecz po prostu od razu uruchamia taki aplet pod kontrolą JRE za pomocą wbudowanego do niej przecież pluginu JRE (podobnie jak działało to w starych przeglądarkach IE3/4, Netscape 3 itp.)

Był też powód do powstania środowiska .NET i C#. Na przeglądarkach konkurencji, które z zasady eliminują uruchamianie przez procesor kodu zewnętrznego (czyli ActiveX) nie uruchomi się żaden kod autorstwa Microsoftu dokładnie w taki samo sposób w jaki nie uruchamiała się java na IE5/6. Microsoft aby moć jednak uruchamiać jakiś swój kod na takich przeglądarkach musiał stworzyć pluginy do tych przeglądarek oraz własną VM dla swojego kodu zewnętrznego. Musiał więc zrobić do samo do czego zmusił Suna. Tyle, że o ile Java musiała obniżyć bezpieczeństwo do poziomu powszechnego na IE (czyli niskiego), o tyle Microsoft musiał podwyższyć swoje bezpieczeństwo do poziomu powszechnego w przeglądarkach konkurencji (czyli wysokiego).
W rezultacie ActiveX w jego pierwotnej postaci jest już na wymarciu, a Microsoft musiał przepisać nawet Windows Update z wersji kontrolki w IE na pełnoprawny program Microsoft Windows Update ściągany co prawda z sieci, ale instalowany jak najbardziej lokalnie. Microsoft pije więc piwo, które sam wszystkim nawarzył. Nie trzeba chyba mówić, że zupełnie niepotrzebnie. Wojna Microsoftu z Javą została zakończona. Microsoft na szczęście jej nie wygrał, choć Javę mocno przydusił w rozwoju.
Został w końcu zmuszony do stworzenia konkurencji na uczciwych zasadach (C#), a jego nowa przeglądarka ma takie same problemy ze zgodnością z bugami IE6 jak konkurencja.
Inna sprawa, że teraz wychodzi jak piekielnie powolną przeglądarkę wyprodukował.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.06.2008 o 11:35, Olamagato napisał:

Pod warunkiem, że mówisz o pełnoprawnym programie w Javie uruchamianym
za pomocą (...) A nie mówisz o dużo bardziej bezpiecznych apletach
wbudowanym w stronę html


Może najzwyczajniej w świecie się nie rozumiemy? "Skrypt wykonywany jest na prawach procesu hostującego" oznacza, że ma taki Security Descriptor jak proces hostujący. Oznacza to, że jeśeli skrypt ma dostęp do plików (a skrypty Javy mają, także w formie apletów na stronie - warunek "zaufania" podałem wcześniej) to może na nich operować jeśli SD procesu odpowiada ACL pliku.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Szczególnie pierwsze linijki obu wersji przykładów (SwingSet2) pokazują ten sam kod działający
jako samodzielny program oraz aplet, który nie ma możliwości zapisu na dysku. Zwróć uwagę
na piąty przycisk na pasku narzędziowym (JFileChooserDemo), który w wersji jnlp nie działa,
w wersji apletu w ogóle go nie ma (program wyłącza go wiedząc, że jest apletem bo i tak
nie zadziała), a mogę Cię zapewnić, że po uruchomieniu tego samego kodu bezpośrednio
z własnego dysku - opcja ta działa i wybiera pliki lokalne (podobnie jak zapisuje).


Przecież napisałem poprzednio dlaczego nie działa: nie jest podpisany lub nie zaufałem podpisowi autora. Jasne, że można stworzyć aplet, który nie może czytać z dysku (przykłady powyżej) ale nie znaczy to, że nie można napisać apletu, który z dysku czyta. I oczywiście, że bezpośrednie uruchomienie z dysku sprawi, że odczyt zadziała nawet bez podpisu. Wciąż jednak mylisz równoważność z implikacją.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

> Java hostowana jest na identycznych prawach.
Jak jednak widzisz fakty pokazują coś innego.


To nie są fakty, to są przykłady. Zatwierdź czyjś certyfikat, uruchom aplet tej osoby i jeśli aplet jest podpisany, aplet ma prawo dostępu do dysku.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Zgubne czy nie zgubne bug w każdym natywnym kodzie jest po prostu niebezpieczny - tak
samo jak bug w skrypcie flasha. Bug w kodzie apletu javy nie ma najmniejszego znaczenia
- w żaden sposób nie zmniejszy bezpieczeństwa - najwyżej aplet nie będzie w ogóle działał.


Bug w skrypcie flasha ma takie same skutki jak bug w kodzie apletu: flash/aplet nie wykona się prawidłowo. Bug w JRE ma takie same skutki jak błąd we flash playerze: przeważnie zgubne. Dlaczego przeciwstawiasz sobie dwie klasy błędów: środowiska i skryptu?

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Bo samo JRE nie pozwala uruchomić instrukcji kodu bajtowego, które są składnikiem operacji
dyskowych oraz sieciowych (dla innego połączenia niż to z którego wczytano aplet). O
ile wiem (choć może się mylę) flash player nie ma takiego mechanizmu.


Właśnie cały czas chodzi o to, że się mylisz. Flash nie ma funkcji zapisu do dysku a funkcje odczytu wymagają potwierdzenia użytkownika (pojawia się dialog otwierania pliku). Jeśli użytkownik jest kretynem i potwierdzi otwarcie pliku, można od niego wykraść informacje. Ale nie różni się to od użytkownika-kretyna, który ufa podpisowi aplety Javy. Co więcej zaufanie podpisowi ma bardziej dramatyczne skutki: aplet ma prawa nie tylko odczytu ale i zapisu. Cały czas próbuję Ci to wyjaśnić (i niestety zawodzę).

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Jeżeli pozwalamy na wgranie i uruchomienie natywnej maszyny wirtualnej dla flasha, to każdy
kod uruchamiany w tej maszynie wykona się zawsze.


Wyjaśnij mi proszę jak chcesz dokonać wstrzyknięcia natywnego kodu maszyny wirtualnej Flasha.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Jeżeli tak, to znaczy, że coś się poprawiło w stosunku do tego co znałem.


I tym samym wprowadzałeś w błąd czytających ten temat. Tym bardziej zgubny, że "reklamowałeś" (z braku lepszego słowa) Javę jako bezpieczną.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Tak, ale nie jest to aplet, a normalna aplikacja - na przykład odpalana przez jnlp tak
jak powyżej. A o ile pamiętam chodziło wyłącznie o kwestię tagu dla apletów Javy.
Jeżeli zaufałeś wydawcy, a wydawca podpisuje swoje programy, to już Twoja sprawa
co się dzieje dalej.


Lokalnie uruchamiana kontrolka nie wymaga zaufanego podpisu. Aplet wymaga zaufanego podpisu a zaufany podpis apletu daje dostęp do dysku na prawach procesu hostującego (przeglądarki).

Samo zaufanie nie różni się znacznie od potwierdzenia otwarcia pliku, prawda? Jasne, wykonujesz inne operacje, ale ryzyko jest większe: raz zatwierdzony podpis daje pełen dostęp dla wszystkich apletów. W przypadku flasha za każdym razem potwierdzasz od nowa.

Nie zrozum mnie źle: nie twierdzę w przeciwieństwie do Ciebie, że jakieś rozwiązanie jest bezpieczne, szczególnie nie twierdzę, że Flash jest bezpieczny. Od początku chodzi mi tylko o to, byś nie mamił ludzi wizją "bezpiecznej Javy", bo historia błędów każdego Javowego środowiska jest naprawdę długa. Zachęcanie ludzi do pisania kodu (w jakimkolwiek języku) jest godne pochwały, ale jednoczesne zapewnianie ich o bezpieczeństwie (i podawanie niesamowicie zabugowanego konkurenta jako dowodu na wyższość czegoś) prowadzi do opłakanych skutków.

[Utnę fragment, bo w koło macieju wałkujemy to samo. Szkoda klawiatury.]

Dnia 04.06.2008 o 11:35, Olamagato napisał:

(...) oznaczałoby, że coś się poprawiło u flasha.


Flash się ciągle poprawia, wciąż jednak zbyt wolno. ;-)

Dnia 04.06.2008 o 11:35, Olamagato napisał:

> Java jest hostowana w IE przy pomocy ActiveX.
Wtrącę się: Tak rzeczywiście się dzieje, ale jest to wyłącznie wina Microsoftu.


Zanim odpowiem na resztę: to JAK działa konkretna kontrolka ActiveX jest winą autora kontrolki. Wina MS leży głównie w braku dobrej dokumentacji, co prowadziło do powstawania fatalnych, niebezpiecznych kontrolek ActiveX (tyczy się to także kontrolek od dużych producentów). Niestety jakość powstającego dzisiaj kodu jest niska: nie ważne, czy mówimy o małych firmach czy korporacjach wielkości Adobe. W założeniu ActiveX daje Ci tyle, ile od ActiveX chcesz. Problemem jest mental: ile chcę? To dajcie wszystko! Po co się mam ograniczać? Przecież mój kod jest znakomity i sam uchronię użytkownika przed problemami.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

W momencie w którym z IE usunięto JVM


Lekcja historii: czemu usunęło?

Dnia 04.06.2008 o 11:35, Olamagato napisał:

samo działającym jak niebezpieczne ActiveX. Różnica polegała jednak na tym, że kontrolka
dowolnego ActiveX wczytywała jakiś kod (np. nieznany, niepodpisany - na początku tej
istnienia technologii nie było żadnych podpisów) bezpośrednio z sieci i przekazywała
do niej sterowanie - na przykład do kodu wirusa, który był taką kontrolką.


Tyle że od około 12 lat najpierw trzeba kontrolce ręcznie pozwolić na uruchomienie. Lub zmienić ustawienia na "zatwierdzaj zawsze" - opcja, która nie powinna istnieć (ale która przynajmniej nie jest do tych 12 lat domyślnie włączona).

[ciach]

Dnia 04.06.2008 o 11:35, Olamagato napisał:

A dlaczego tak postąpiono? Ponieważ gdyby Microsoft spróbował i tutaj jakoś zablokować
uruchamianie Javy na jego przeglądarce IE, to musiałby tym samym usunąc również możliwośc
uruchamiania zarówno swoich kontrolek ActiveX, jak i wszelkich innych rozszerzeń swojej
przeglądarki.


Ponownie: historia się kłania. :-) Dlaczego MS odepchnął od siebie Javę? :-]

Dnia 04.06.2008 o 11:35, Olamagato napisał:

A na taki ruch nie mógłby się zdecydować nie ograniczając drastycznie jej
funkcjonalności (automatycznie przegrywając z konkurencją innych przeglądarek i likwidując
możliwość uruchamiania Windows Update).


Nie bardzo rozumiem do czego zmierzasz: masz pretensje, że Java jest równoprawnym elementem ekosystemu?

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Był też powód do powstania środowiska .NET i C#. Na przeglądarkach konkurencji, które
z zasady eliminują uruchamianie przez procesor kodu zewnętrznego (czyli ActiveX) nie
uruchomi się żaden kod autorstwa Microsoftu dokładnie w taki samo sposób w jaki nie uruchamiała
się java na IE5/6. Microsoft aby moć jednak uruchamiać jakiś swój kod na takich przeglądarkach
musiał stworzyć pluginy do tych przeglądarek oraz własną VM dla swojego kodu zewnętrznego.
Musiał więc zrobić do samo do czego zmusił Suna.


.NET i C# powstały z tego samego powodu z jakiego MS zarzucił Javę. Ponownie spytam: dlaczego? :-)

Dnia 04.06.2008 o 11:35, Olamagato napisał:

W rezultacie ActiveX w jego pierwotnej postaci jest już na wymarciu, a Microsoft
musiał przepisać nawet Windows Update z wersji kontrolki w IE na pełnoprawny program
Microsoft Windows Update ściągany co prawda z sieci, ale instalowany jak najbardziej
lokalnie.


Masz jakieś wewnętrzne źródła dlaczego Windows Update nie jest kontrolką ActiveX, czy zgadujesz? Bo zgadywać to każdy może. :-]

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Microsoft pije więc piwo, które sam wszystkim nawarzył. Nie trzeba chyba mówić,
że zupełnie niepotrzebnie. Wojna Microsoftu z Javą została zakończona. Microsoft na szczęście
jej nie wygrał, choć Javę mocno przydusił w rozwoju.


Bardzo mnie to rozbawiło. Ponownie ta sama lekcja historii.

Dnia 04.06.2008 o 11:35, Olamagato napisał:

Został w końcu zmuszony do stworzenia konkurencji na uczciwych zasadach (C#), a jego
nowa przeglądarka ma takie same problemy ze zgodnością z bugami IE6 jak konkurencja.
Inna sprawa, że teraz wychodzi jak piekielnie powolną przeglądarkę wyprodukował.


Podoba mi się Twoja historia, szkoda tylko, że to baśń. Jeśli nie wiesz gdzie leży błąd w Twoim rozumowaniu, z chęcią Ci go przedstawię. :-)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować