Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML]Jak się bronić przed spreparowaniem linku?
Forum PHP.pl > Forum > Przedszkole
Rid
Strona wysyła getem id produktu na inną stronę.Query Stringiem w zależności od tego ID wczytuje z bazy zmienne(opisy)
tego produktu.Mam możliwość podejrzenia requestów w takiej bazie i wygląda tak:
http://localhost:44301/MojaStrona.php?PrzedmiotID=3.
Z czego 3 jest id produktu.Według niej wybieramy jest przedmiot z bazy i wczytywany na stronę.
Mam jednak dylemat a co jeśli ktoś wpisze w przeglądarkę:
http://localhost:44301/MojaStrona.php?PrzedmiotID=1.
To wyskoczy mu inny przedmiot,albo co gorsza będzie mógł linkować przedmioty na swojej stronie.
Jak to można by było rozwiązaćquestionmark.gif?
Przed wysłaniem kodować 1,a na stronie gdzie jest query stringiem pobierana tą 1 dekodowaćquestionmark.gif?Jak to rozwiązaćquestionmark.gif
nospor
Cytat
Mam jednak dylemat a co jeśli ktoś wpisze w przeglądarkę:
http://localhost:44301/MojaStrona.php?PrzedmiotID=1.
To wyskoczy mu inny przedmiot
I w czym problem? Nie może on widzieć przedmiotu o id =1? Jak nie może, to znaczy, że chyba jakiś system praw masz? Więc tym systemem praw sprawdzaj czy dany user może widzieć przedmiot o id = 1 czy nie.
Rid
Strona ogólnodostępna.Nie martwi mnie to,że komuś wyskoczy strona z przedmiotem.Martwi mnie ,że każdy będzie mógł taki link zakotwiczyć u siebie na stronie.Niech sobie Pan teraz wyobrazi,jak 5000 osób wrzuci taki link na swoją stronę,
niech 100 osób na każdej takiej stronie kliknie w link,to niech obliczy ile requestów będzie szło na mój serwer i jak
obciąży to serwer i bazę danych.
Nie wiem jak się przed takim czymś zabezpieczyć.
nospor
Zazwyczaj ludzie się cieszą, że ktoś wrzuca ich linki na cudzą stronę.

Co innego gdy w iframe na cudzej stronie ktoś wrzuci Twoją stroną - wówczas o to można mieć pretensje.
Rid
Kurcze ,o tym też nie pomyślałem,a jest jakiś sposób żeby bronić się przed takimi praktykami??
nospor
1) w js dość prosty sposób sprawdza się czy to iframe czy nie i się z niego wyskakuje.
wykop w iframe wklada wszystkie strony i niektóre portale z niego wyskakują

2) Sprawdzanie referera powinno pomóc. Ale referera nie ktore przeglądarki nie wysyłają
Rid
Będę musiał pogrzebać trochę w google ,zobaczyć jakie są sposoby ochrony przed takimi praktykami.Jakby ktoś
miał jakieś pomysły to niech piszę,jestem otwarty na sugestie snitch.gif
!*!
Chcesz blokować dostęp do czegoś co chcesz pokazać? A jaki jest tego sens skoro dostęp jest i tak dla wszystkich. Szukasz dziury w całym, a skoro zaczynasz z projektem to zapewniam Cie że tysiące osób nagle go nie powieli i nie wklei linka.
Rid
Cytat
A jaki jest tego sens skoro dostęp jest i tak dla wszystkich

Taki ,żeby korzystali z mojej strony,nie ze stron podlinkowanych.
Niech sobie Pan wyobrazi, siedział Pan dużo czasu nad zrobieniem czegoś,ktoś wrzuca Pana dzieło do iframki i dowolnie modernizuje u siebie Pana stronkę.Nie wiem ,czy się Pan bawił z iframami-ale za pomocą tego "pioruństwa",można dowolnie przekształcić źródłową strone ustawić tła,kolory,style czcionek i Bóg we jeszcze co.W rezultacie taki ktoś może przekształcić Pana dzieło,którego nawet Pan sam nie rozpozna i będzie czerpał korzyści Pana kosztem.Więc ja widzę w tym sens.
!*!
Nadal uważam że nie zablokujesz czegoś co chcesz pokazać. Zablokujesz iframe? niby jak? przez JS żeby odpalało stronę 'od nowa'? Ok, zrób tak... Tylko że ja zamiast iframe użyję canvas i co wtedy? Nic z tym nie zrobisz. Dlatego im mocnej się starasz to "zabezpieczyć" tym więcej sposobów by to obejść.
Rid
Mam świadomość ,że na 100% się nie zabezpieczę,ale przynajmniej komuś utrudnię życie wink.gif
by_ikar
Jeżeli wyłączy js to można jeszcze ustawić żeby domyślnie np html miał w css ustawiony hidden i dopiero js po sprawdzeniu czy dana strona jest w ramce nadaje w css tagowi html visible. Ale można jeszcze osadzić ramkę w ramce, wtedy skrypt wyskoczy z pierwszej ramki ale nadal pozostanie w drugiej. Ogólnie nie da się tego zabezpieczyć w 100% chociażby dlatego że nagłówki można sobie modyfikować jak się chce więc sprawdzanie referrera jest raczej bezsensu. Na większość ramek zadziała:
Kod
<script>
if (top.location != location)
top.location=self.location;
</script>


Z bardziej upartymi sobie raczej nie poradzisz. Nie mniej, wyświetlaj jakieś tam reklamy na stronie, więc nawet jeżeli wzrośnie ci oglądalność, co obciąży twój serwer, to zawsze też zarobisz na ten serwer.
Rid
Przeczytałem ,że także prawidłowa konfiguracja htaccess rozwiązuje częsciowo ten problem,niestety ja mam iis więc musze się pobawić isapifilter ,hmm,na razie jestem w trakcie zbierania materiałów -mistrzem od zabezpieczeń nie jestem,tak więc dodatkowe sugestie będą nagradzane.
flashdev
Cytat(Rid @ 5.09.2011, 15:25:26 ) *
Taki ,żeby korzystali z mojej strony,nie ze stron podlinkowanych.
Niech sobie Pan wyobrazi, siedział Pan dużo czasu nad zrobieniem czegoś,ktoś wrzuca Pana dzieło do iframki i dowolnie modernizuje u siebie Pana stronkę.Nie wiem ,czy się Pan bawił z iframami-ale za pomocą tego "pioruństwa",można dowolnie przekształcić źródłową strone ustawić tła,kolory,style czcionek i Bóg we jeszcze co.W rezultacie taki ktoś może przekształcić Pana dzieło,którego nawet Pan sam nie rozpozna i będzie czerpał korzyści Pana kosztem.Więc ja widzę w tym sens.


Nie do końca można.
http://en.wikipedia.org/wiki/Same_origin_policy
!*!
Cytat
Jeżeli wyłączy js to można jeszcze ustawić żeby domyślnie np html miał w css ustawiony hidden i dopiero js po sprawdzeniu czy dana strona jest w ramce nadaje w css tagowi html visible


czyli spowolnisz wyświetlanie strony tylko dla marnej idei? biggrin.gif

Cytat(Rid @ 5.09.2011, 22:31:55 ) *
Mam świadomość ,że na 100% się nie zabezpieczę,ale przynajmniej komuś utrudnię życie wink.gif


Ale niby w jaki sposób chcesz komuś utrudnić życie skoro to są podstawy? Blokujesz iframe, fajnie ale dziś mało kto ich używa, a skoro bawisz się w pseudo bezpieczeństwo to prędzej ktoś pobierze źródło strony razem z plikiem css i przez ajax wyświetli to do swojego diva.

Twoje myślenie przypomina blokowanie pobierana obrazków z 'blogaska' w latach 90. Co z tego że "zablokujesz", skoro jest print screen.
Rid
Flashdev,dziękuje, dzięki temu artykułowi doszedłem do takiego ustawienia headera:
Access-Control-Allow-Origin
może to także pomoże:),dodatkowa w razie "w" rzucę na każdą stronę skrypcik, jak wszystko porobię podepnę ISAPIfilter,
w c# jeszcze istnieje takie coś jak"request authenification",pobawię się jeszcze z tym i myślę że wystarczy.
Dziękuję wszystkim za wypowiedzi.
!*!
Cytat(Rid @ 6.09.2011, 13:09:06 ) *
Access-Control-Allow-Origin


Właśnie tego się używa w ajax do odbierania odpowiedzi z innego serwera wink.gif

A w ogóle to nikt nie poruszył kwestii... logów. Jak wybadasz że z jakiejś domeny generuje Ci za duży ruch, wtedy... wiesz co z nią zrobić.
Rid
Ok zabezpieczyłem to skrypcikiem,oraz podnosząc status zabezpieczenia na wyższy.
Mam jednak pytanie,czy nie lepiej by było w tym linku:
http://localhost:44301/MojaStrona.php?PrzedmiotID=1.
Zaszyfrować cały parametr z wartością -PrzedmiotID=1.Mówię zaszyfrować,gdyż nie trzeba by było,zaszyfrowanej wartości
zapisywać do bazy.W przypadku hashowania musiałbym przy każdym requeście zapisywać zakodowaną wartość do bazy
a potem porównywać.Chyba to by obciązyło znacząco samą bazę.
Czy szyfrowanie w tym przypadku ma sens??
nospor
Przecież to nie ma sensu.

Załóżmy że zaszyfrowałeś i masz taki link:
http://localhost:44301/MojaStrona.php?Prze...ablaszyfrowanie

I taki link masz na swojej stronie. No to jak ktoś będzie chciał ten link wstawić na swoją stronę to wstawi. Nie musi znać co zawiera wartość zaszyfrowana. Jemu wystarczy tylko link
Rid
Z tą różnicą ,że nie będzie wiedział czego dotyczą parametry i jakie przyjmują wartości.
nospor
Jak nie będzie wiedział? Kliknie na Twój link i zobaczy, że dotyczy on produktu X po czym stwierdzi, że właśnie o ten produkt mu chodziło i wstawi na swoją stronę.
Rid
I co tu z tym fantem zrobić sciana.gif
I chyba wpadłem na pomysł,szyfrowanie według klucza ,który jest np miesiącem i dniem.Klucz byłby wtedy ważny przez jeden dzień -potem link uległby zmianie.Chyba pomysł dobry.
nospor
Generuj token który jest ważny tylko 10 minut i dołączaj do linka.

A bardziej poważnie:
przestań sobie tym głowę zawracać bo już ci szajba pomału na tym punkcie odbija wink.gif
Rid
Mój pomysł wydaje mi się lepszy,łatwiejszy do wdrożenia.
Dziękuję za pomoc,ostatni post w tym temacie.To nie szajba,próbuje znaleźć optymalne rozwiązania.
nospor
Cytat
Mój pomysł wydaje mi się lepszy,łatwiejszy do wdrożenia.
Na dobrą sprawę to też jest token smile.gif

Z tą szajbą to był żart, nie miałem na myśli, że wariujesz - nie bierz wszystkiego tak dosadnie smile.gif
Nie mniej jednak za bardzo się przejmujesz tymi linkami

Poza tym takie kombinowanie linkami ma dwie bardzo poważne wady:

1) Na dzień dobry pozbawiasz się ładnych urli - no chyba, że będziesz tworzył ładny url a na koniec walił brzydki token
2) Pozbawiasz się wyników z google (ogólnie z wyszukiwarek). Przecież one będą miałe linki z tokenami, które już będą nieważne

i
3) Ludzie często w uczciwych zamiarach wklejąją linki np, na forum czy w arcie by komuś pomóc podając link do jakiejś ciekawej rzeczy, w tym przypadku na Twoim serwerze.

Robiąc to co zamierzasz wbrew pozorom nie pomagasz sobie a robisz kuku
Rid
Cytat
1) Na dzień dobry pozbawiasz się ładnych urli - no chyba, że będziesz tworzył ładny url a na koniec walił brzydki token

Mam url bezwzględny-coś na styl tego forum-więc szyfrowany łańcuch będzie zawsze na końcu.
Cytat
2) Pozbawiasz się wyników z google (ogólnie z wyszukiwarek). Przecież one będą miałe linki z tokenami, które już będą nieważne

i
3) Ludzie często w uczciwych zamiarach wklejąją linki np, na forum czy w arcie by komuś pomóc podając link do jakiejś ciekawej rzeczy, w tym przypadku na Twoim serwerze.

Odnośnie 2 i 3 punktu szyfrowane będą tylko linki generujące query stringi.Pozostałe linki nie będą szyfrowane-bo to by była już paranoja:).
Moim zdaniem zwiększy to znacząco poziom bezpieczeństwa aplikacji.Uniemożliwi to w pewnym sensie różnym manipulacjom.Jeśli chodzi o google to pozycjonowanie tych stron z szyfrowanym linkiem wcale mnie nie interesuje.Nawet lepiej jak wyszukiwarka tego nie znajdzie.Dostęp do tych stron mają być tylko i wyłącznie z poziomu aplikacji(np.ze strony głównej).
!*!
Kod
Moim zdaniem zwiększy to znacząco poziom bezpieczeństwa aplikacji.Uniemożliwi to w pewnym sensie różnym manipulacjom.


Nadal mi nie odpowiedziałeś, jak to ma niby zwiększyć bezpieczeństwo? We wszystkich sposobach jakie padły w tym temacie to czysta iluzja i z bezpieczeństwem ma mało co wspólnego.
Rid
Teraz mój link wygląda tak
http://localhost:44301/MojaStrona.php?TBty...Id=Q6ANH/ZYXkI=
Chyba nie takie straszne.
Odnośnie bezpieczeństwa przytoczę fragment niestety po ang:
Cytat
Using query strings to send data from the browser to the server is a widespread approach. Giving the visitor of a web application the opportunity of modifying query strings by transmitting them in clear text, is certainly a potential security threat.
!*!
Czekam na odpowiedź w dalszym ciągu. Ok masz link jaki masz, wklejam go na swojej spamerskiej stronie która chce CI zrobić kuku... I link działa. Wykonuje go 1000 razy, a on nadal działa, no bo jakże by inaczej skoro doprowadzi mnie do produktu. Hmm że niby jest "QWEB@BN!@7^&#@" zamiast 123? I co z tego skoro mogę z Twojej strony pobrać wszystkie linki, bo przecież i tak je generujesz.
Rid
Kurcze,nie czytasz uważnie,ten link będzie ważny tylko jeden dzień potem klucz wygeneruje inny link.
Czyli dla rozjaśnienia sprawy,wklejasz go na swoją spamerską stroną która chce mi zrobić kuku... I link działa ale tylko przez jeden dzień na następny dostaniesz już error 404.
!*!
W dalszym ciągu nie widzę tego zabezpieczenia. Skoro wchodzę na Twoją stronę co (no nich będzie) 24h i pobieram wszystkie linki jakie generuje Twój serwis.
Rid
Mogę zrobić że co minutę,będą inne,albo co sekundę ,ale bez przesady.Na tym polega szyfrowanie,że Musisz znać klucz ,żeby deszyfrować.
!*!
To będę sprawdzał te linki nawet co sekundę wink.gif czas nie gra tu roli. Poza tym, takim sposobem odcinasz sobie target, bo nikt nie będzie szukał 2 linku skoro 1 nie działa np ten sprzed tygodnia.

Ale co Ty Rid szyfrujesz skoro w jawnej postaci one będą dostępne u Ciebie na stronie? biggrin.gif
Rid
To będę sprawdzał te linki nawet co sekundę,nie wiem ja to Zrobisz,teoretycznie Musiałbyś wklepać link i w jedną sekundę kliknąć,bo po tej jednej sekundzie już link będzie nieważny.
!*!
Dobra rozkmińmy to... Masz linki w takiej postaci:

Kod
www.domena.com/index.php?opcja=tajnykod


albo nawet zaszalałeś i zrobiłeś przyjazne:

Kod
www.domena.com/tajnykod


Dajesz to u siebie na stronie głównej, gdzie każdy ma dostęp jako:

Kod
<a href="www.domena.com/tajnykod">link do produktu A</a>


Takie coś jest w źródle strony. Tak? Na razie się zgadza? No to jedziemy dalej, piszę skrypt który wchodzi na Twoją stronę, pobiera z jej źródła wszystkie linki po czym zapisuję je u siebie w pliku/bazie. Z pobranej listy linków kolejnym skryptem wchodzę na Twoją stronę setki razy.

Mówisz że co sekundę nawet będą się zmieniać, no to ja co sekundę będę te linki odczytywał, bo kto mi zabroni pobrać je wszystkie skoro sam mi je udostępniasz.
Rid
Ale po co je Będziesz pobierał,jak za sekundę będą nieważne?Pobierzesz kolejnę ,a te po sekundzie i tak będą nieważne,i Co zrobisz z nimi w ciągu 1sekundy,odpalisz skrypt na niedziałające już linki?questionmark.gif
!*!
Tak, bo jednocześnie mogę je pobierać i na nie wchodzić. Poza tym piszmy o rzeczach realnych, nie zrobisz zmiany co sekundę bo w tyle to może się nawet strona nie załadować ;P i ktoś wjedzie, 3 sekundy później ma już niedziałający link? wink.gif

Zrozum w końcu że nie ukryjesz tego co chcesz pokazać. Nie ma i nie będzie na to sposobu, bo to nie logiczne.
Rid
Zapis klucza do bazy ,rozwiązałby tą kwestię,ale tylko sobie gdybamy ,mi na razie takie coś zadawala ,jak będzie w praktyce to się okaże.Martwi ,mnie trochę godzina 00.00.00-bo się dana zmieni i zerwie połączenie -nieważne,chyba i tak będę musiał zapisać klucz do bazy:(
!*!
Nawet gdybyś miał ten plik schowany w bunkrze z "lanem" i łączył się z nim za pomocą jednego IP w określonej sekundzie pory dnia, to Twoje "zabezpieczenie" leży bo i tak podajesz mi link na tacy w postaci
Kod
<a href="www.domena.com/tajnykod">link do produktu A</a>
Rid
Może Pocztaj o szyfrowaniu.Wczytuje Pan www.domena.com/index.php?opcja=tajnykod.
Stron poprzez query string pobiera tajnykod.
Za pomocą klucza ,którym został zaszyfrowany, odszyfrowuje go,w rezultacie daje nam np.zmienną ogórki.

Teraz ,czy istniej w bazie danych Select * from tabela where jakaśkolumna=ogórki.
jeśli nie to wywalam błąd 404.
!*!
To co robisz zabezpiecza wyłącznie Twoje ego, bo wmawiasz sobie że to w ogóle jest zabezpieczenie. Tego nawet nie można nazwać szyfrowaniem to raz. Dwa, ok idę w Twoją teorie i kupuję że jednak coś szyfrujesz, podajesz mi link "2B873rUWEQ" ok, "zaszyfrowałeś go sobie" i podajesz mi ten link w takiej formie do produktu który jemu odpwiada? To jaki jest sens tego "szyfrowania" ? A no tak, zmieniasz klucz co sekundę który za każdym razem przypisuje się do produktu linku, ale JA nadal go widzę.

edit:

Cytat
Wczytuje Pan www.domena.com/index.php?opcja=tajnykod.
Stron poprzez query string pobiera tajnykod.
Za pomocą klucza ,którym został zaszyfrowany, odszyfrowuje go,w rezulacie daje nam np.zmienną ogórki.

Teraz ,czy istniej w bazie danych Select * from tabela where jakaśkolumna=ogórki.
jeśli nie to wywalam błąd 404.


I prawidłowo. Ale nadal odpowiedzi nie uzyskałem. Brak tu zabezpieczenia, bo podajesz mi link do ogórków, które ja chce zobaczyć.
Poza tym szyfrujesz klucz? To jakiś nowy sposób?
reza
Cytat(Rid @ 5.09.2011, 10:56:14 ) *
Strona wysyła getem id produktu na inną stronę.Query Stringiem w zależności od tego ID wczytuje z bazy zmienne(opisy)
tego produktu.Mam możliwość podejrzenia requestów w takiej bazie i wygląda tak:
http://localhost:44301/MojaStrona.php?PrzedmiotID=3.
Z czego 3 jest id produktu.Według niej wybieramy jest przedmiot z bazy i wczytywany na stronę.
Mam jednak dylemat a co jeśli ktoś wpisze w przeglądarkę:
http://localhost:44301/MojaStrona.php?PrzedmiotID=1.
To wyskoczy mu inny przedmiot,albo co gorsza będzie mógł linkować przedmioty na swojej stronie.
Jak to można by było rozwiązaćquestionmark.gif?
Przed wysłaniem kodować 1,a na stronie gdzie jest query stringiem pobierana tą 1 dekodowaćquestionmark.gif?Jak to rozwiązaćquestionmark.gif


Nie wiem co siedzi w twojej głowie, hmm chcesz żeby inni nie linkowali na twoją stronę. Nie zamieszczali produktów z twojej strony na swojej "spamerskiej"?. Po co to robisz? Żeby twoja strona była niewidzialna, google nie będzie indeksował poprawnie treści, skoro jak tam nazwałeś token w url będzie codziennie inny. Z drugiej strony wg mnie prowadzenie dalszej tej dyskusji nie ma sensu.
gac3k
no żenada, a moderator zamiast (co w innych przypadkach zdarza mu się często) w ostrych słowach wytłumaczyć że to bez sensu tutaj akurat się patyczkuje. Śmieszna sprawa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.