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ć

?
Przed wysłaniem kodować 1,a na stronie gdzie jest query stringiem pobierana tą 1 dekodować

?Jak to rozwiązać
nospor
5.09.2011, 11:17:16
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.
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
5.09.2011, 11:28:56
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.
Kurcze ,o tym też nie pomyślałem,a jest jakiś sposób żeby bronić się przed takimi praktykami??
nospor
5.09.2011, 11:33:37
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ą
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
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.
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ść.
Mam świadomość ,że na 100% się nie zabezpieczę,ale przynajmniej komuś utrudnię życie
by_ikar
5.09.2011, 21:50:15
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.
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
6.09.2011, 01:10:23
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?

Cytat(Rid @ 5.09.2011, 22:31:55 )

Mam świadomość ,że na 100% się nie zabezpieczę,ale przynajmniej komuś utrudnię życie

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.
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

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ć.
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
7.09.2011, 13:02:48
Przecież to nie ma sensu.
Załóżmy że zaszyfrowałeś i masz taki link:
http://localhost:44301/MojaStrona.php?Prze...ablaszyfrowanieI 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
Z tą różnicą ,że nie będzie wiedział czego dotyczą parametry i jakie przyjmują wartości.
nospor
7.09.2011, 13:08:04
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ę.
I co tu z tym fantem zrobić

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
7.09.2011, 13:20:18
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
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
7.09.2011, 13:46:24
Cytat
Mój pomysł wydaje mi się lepszy,łatwiejszy do wdrożenia.
Na dobrą sprawę to też jest token

Z tą szajbą to był żart, nie miałem na myśli, że wariujesz - nie bierz wszystkiego tak dosadnie

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
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.
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.
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.
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ę

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?
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.
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?
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?

Zrozum w końcu że nie ukryjesz tego co chcesz pokazać. Nie ma i nie będzie na to sposobu, bo to nie logiczne.
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>
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?
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ć

?
Przed wysłaniem kodować 1,a na stronie gdzie jest query stringiem pobierana tą 1 dekodować

?Jak to rozwiązać

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
7.09.2011, 20:36:28
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.