2017-07-22 13 views
6

W javascript można "przesłonić" właściwości lub metody Object.prototype. Na przykład:Jak uniknąć zanieczyszczenia prototypowego w javascript?

Object.prototype.toString = function(){ 
    return "some string"; 
}; 

może złamać całe wniosek, jeśli nie stosować ostrożnie. Czy istnieją jakieś narzędzia, techniki lub podejścia, aby tego uniknąć (na przykład jakiś "tryb ścisły", który nie pozwala twórcy na przesłonięcie właściwości obiektu)?

+4

Po prostu tego nie rób i nie przyjmuj żadnych bibliotek, które to robią? – Paul

+3

'Object.freeze (Object.prototype)' pomoże, ale znowu .. nie wiem, ile zanieczyszczeń stworzy –

+2

Dobra lektura dla każdego, kto znajdzie się na to pytanie: https://esdiscuss.org/topic/ object-freeze-object-prototype-vs-reality –

Odpowiedz

5

Object.freeze(YourConstructor.prototype) może pomóc ochronić Twój obiekt prototypowy związany z konstruktorem przed zmuckowaniem. Z MDN:

Metoda Object.freeze() zawiesza obiekt: to zapobiega dodawaniu do niego nowych właściwości; zapobiega usunięciu istniejących właściwości; i uniemożliwia zmianę istniejących właściwości, ich możliwości wyliczania, konfigurowalności lub zdolności do pisania, zapobiega również zmianie prototypu.

Działa na samym obiekcie, zamiast wykonywać kopię, która jest zamrożona. Zwraca to samo referencje, które przekazujesz.

Najlepiej zostawić wbudowane prototypy samodzielnie, więc używanie go na Object.prototype może nie być dobrym pomysłem. :-) Na pewno musisz zrobić wiele testów testów, jeśli ... Zobacz this thread na liście dyskusyjnej es-discuss dla odpowiednich, przydatnych informacji.

+0

hmm, ale prostą rzeczą, którą chcę dodać (lub można zapytać), co jest co zrobić, jeśli jakiś atak odrzuci sam obiekt? –

+2

@KoushikChatterjee Techniki te mogą pomóc w zapobieganiu * przypadkowemu * łamaniu aplikacji przez osoby trzecie. Nigdy nie mogą * zabezpieczyć * przed atakującym. Jeśli ktoś ma na twojej stronie nieograniczony kod, już przegrał. – Bergi

+0

+1, ponieważ można zamknąć drzwi, ale nie można umieścić pułapek we własnym domu, tak nie działa bezpieczeństwo. – Remi