• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze skryptem kalkulatora

Object Storage Arubacloud
0 głosów
571 wizyt
pytanie zadane 19 stycznia 2016 w JavaScript przez Michał Tofik Dulik Nowicjusz (150 p.)

Witam uczę się programować w js i napotkałem taki oto problem: gdy odejmuje 2.3-0.3 to wychodzi 1.9999999999999998 :/ coś tu jest nie tak.... Oto Kod:


    function addletter(x){
        var box = document.getElementById('ekran');
        box.innerHTML +=x;

        if(x=='c'){
            box.innerHTML='';
        }
    }

    function oblicz(){
        var box = document.getElementById('ekran');
        x=box.innerHTML;
        x=eval(x);
        box.innerHTML=x;
    }

 

2 odpowiedzi

+1 głos
odpowiedź 19 stycznia 2016 przez niezalogowany
wybrane 19 stycznia 2016 przez Michał Tofik Dulik
 
Najlepsza
Wynika to z niemożliwości zapisania dokładnie wartości 0.3 w systemie binarnym, którego używa funkcja eval. Tak samo jak w systemie dziesiętnym nie możesz zapisać dokładnie 1/3, ponieważ jest to 0.333333333333333 -> i kiedyś na te trójki skończy się miejsce, tak 0.3 w eval - jest po prostu najbardziej do tej wartości przybliżane.

Zaokrąglaj wyniki do 14 miejsca po przecinku i powinno działać : )
komentarz 19 stycznia 2016 przez Michał Tofik Dulik Nowicjusz (150 p.)
Dzięki Wielkie!
+4 głosów
odpowiedź 19 stycznia 2016 przez Comandeer Guru (601,110 p.)
Pomijając sam problem opisany już w poprzedniej odpowiedzi, należy dodać, że użycie tutaj eval jest błędem, bo pozwala na WYKONANIE JAKIEGOKOLWIEK KODU. Lepiej dzielić string po znakach działań + parsować wszystko inne na liczby. Całkiem możliwe, że będzie nawet szybciej działać ;)
komentarz 20 stycznia 2016 przez event15 Szeryf (93,790 p.)

Mnie zastanawia dlaczego możliwość wykonania jakiegokolwiek kodu w js po stronie użytkownika jest błędem?

Nadal nie widzę związku..

Równie dobrze możesz sobie otworzyć konsole na stronie z tym kalkulatorem i wklepać self-XSSa, albo napisać hasło do maila na czole...

Jak sobie sam nie zrobisz krzywdy na stronie z tym kalkulatorem.. to nikt inny przez funkcję javascriptu też tego nie zrobi.

U panie. Z takim podejściem to daleko nie zajdziesz.

Brak zrozumienia totalnych podstaw zachowania bezpieczeństwa to równia pochyła ku głośnemu skompromitowaniu programisty. Tu jest przykład w JS.

Jest zasada, która mówi - nigdy nie ufaj użytkownikowi swojego programu/swojej strony. Myślisz, że to jest zasada z dupy wzięta? Patrząc przeszłościowo na PHP chociażby to przez taką ignorancję jaką prezentujesz język ten zaskarbił sobie tyle hejtu. Korzystanie ze zmiennych globalnych, listery plików wykonywane właśnie za pomocą funkcji, które umożliwiały wykonanie dowolnego polecenia po stronie serwera.

Łatwość nauki podstaw PHP sprawiła, że wielu fircyków myślących, że potrafią programować wypuściło w świat zupełnie niezabezpieczane dane. Przez to tematem przewodnim milw00rma były głównie skrypty PHP (joomla, wordpress, phpBB, miliony wtyczek do nich). Pojawiła się wtyczka google maps do przema - miliony stron na świecie padło, bo autor nie pomyślał, że poza ciekawą funkcjonalnością istnieje coś takiego jak brak zaufania do odbiorcy produktu.

JavaScript nie jest już językem który działa tylko po stronie klienta - spójrz na node.js i inne frameworki. JavaScript praktycznie od serwera po klienta znajdzie wszędzie zastosowanie, a tak ignoranckie podejście do spraw bezpieczeństa niestety nie poskutkuje jedynie wykradnięciem danych.

Jeśli uważasz że zamiana eval() na inną funkcję jest zabezpieczeniem rodem z banków, to naprawdę mało masz wspólnego z programowaniem. Ale tak samo to, że ktoś pozna moje imie lub ktoś pozna mój adres email to jest kradzież danych osobowych chroniona prawem cywilnym. Za takie rzeczy sam się sądziłem i takie sprawy zawsze się wygrywa.

jeżeli człowiek się uczy programować w danym języku, to z miejsca powinien być uczulany na takie rzeczy jak filtrowanie danych - nie bo to fajnie wiedzieć, tylko jest to obligatoryjne. I każdy powinien znać chociaż podstawowe metody. Nie mówię tutaj o specjalistach od zabezpieczeń, którzy są freekami i wszystko powinno być dla nich szyfrowane, bez możliwości cofania strony, filtrowane milionem funkcji, sanityzowane i przetwarzane w rozproszonych serwerach. Mówię o głupim ifie, który sprawdzi czy rzeczywiście otrzymujemy od użytkownika to, czego oczekujemy. Czy wykorzystaniu innej funkcji, która działa praktycznie tak samo a jest dużo bezpieczniejsza.  

komentarz 20 stycznia 2016 przez niezalogowany
Zgoda. Kawał dobrej roboty w tłumaczeniu mi i pokazaniu realnych przykładów (chociaż ich zaistnienie naprawdę wymaga ogromnego wkładu pracy użytkownika).

Dziękuje za cierpliwość. Muszę bardziej myśleć w kategoriach social engineering.
komentarz 20 stycznia 2016 przez niezalogowany

event15, Comandeer  'to podejście' dzięki takim ludziom jak wy - się zmienia : )

Wnioski: trzeba myśleć o wszystkim, wszędzie, nawet po stronie klienta w javascripcie, nawet tam gdzie osoby trzecie 'nie mają' dostępu.

komentarz 20 stycznia 2016 przez event15 Szeryf (93,790 p.)
Taki przykład niedawno tu na forum byl. Chłopaczek sobie stworzył stronę, na której można było wgrać plik. W ogóle nie zabezpieczył się. W ciągu kilku minut wgrano mu plik php który służy jako coś w rodzaju trojana. Gdyby nie wewnętrzne zabezpieczenia serwera to ktoś miałby poważny problem bo stworzył furtkę do zrobienia wielkiego bajzlu w serwerowni na której stoi conajmniej kilkaset stron użytkowników. Wyobraź sobie, że ktoś trzymał tam jakieś dane które miały wartość pieniężną. Myślę że nastolatek nie miałby szans zapłacić kar tak dużej liczbie użytkowników i serwerowni.
komentarz 20 stycznia 2016 przez niezalogowany
Hej, z góry zakładasz, że nie mam pojęcia o bezpieczeństwie aplikacji internetowych...

Po prostu trochę zlekceważyłem problem self-XSSów - stąd ta dyskusja.

Podobne pytania

0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 12 lutego 2020 w JavaScript przez Nowicjusz13 Użytkownik (570 p.)
0 głosów
2 odpowiedzi 326 wizyt
pytanie zadane 1 lutego 2020 w JavaScript przez Nowicjusz13 Użytkownik (570 p.)
0 głosów
1 odpowiedź 347 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...