SZUKANA FRAZA:

Zabezpieczanie danych na stronie

Data publikacji: 2006-11-24
Autor: Souvriel

W poniższym tekście przedstawię, w jaki sposób ochronić dane ze strony WWW. Gadkę czas zacząć...


1. "Dwa przykazania autora".

<script>function rf() {return false}; document.onselectstart=rf;document.ondragstart=rf;</script>
ZALETY:
* blokuje zaznaczanie tekstu (co za tym idzie - jego kopiowanie);
* nie pozwala przeciągać obrazków do paska adresu (niewiele osób wie, iż po przeciągnięciu jakiejkolwiek grafiki [oczywiście nie licząc backgroundów] otwiera się nowa strona z owym obrazkiem - i bez dodatkowych skryptów takich jak blokowanie P[rawego]P[rzycisku]M[yszy]!)

WADY:
* przy okazji blokowania zaznaczania tekstu utrudniamy wypełnianie formularzy - mianowicie chcąc skasować tekst musisz czekać trzymając backspace lub delete. Nie ma zalet bez wad... Ale nie ma kolców bez róży! :)

BONUS:
* jeśli chcesz jeszcze bardziej zdenerwować usera możesz dodać przed kończącym znacznikiem linijkę "document.onkeydown=rf;", która nie pozwala używać klawiszy na stronie (dobry trik chroniący przed - [CTRL]+[C] - kopiowaniem). Oczywiście bezsensownym wyjściem byłoby używanie tego bonusu nie umieszczając blokowania PPM - gdzie w menu kontekstowym, jak wiadomo, jest opcja COPY, aczkolwiek bez CLOSE. Jedyna wada: nie można wpisywać danych do formularzy - nie używaj więc tego skryptu na podstronach zawierających tego typu obiekty.

2. Skrypt blokujący PPM.

<script>
<!--
if(window.Event)
document.captureEvents(Event.MOUSEUP);
function nocontextmenu()
{event.cancelBubble=true;event.returnValue=false;return false;}
function norightclick(e)
{if(window.Event)
{if(e.which==2||e.which==3) return false;}
else
if(event.button == 2||event.button==3) {event.cancelBubble=true;event.returnValue=false;return false;}}
document.oncontextmenu = nocontextmenu;
document.onmousedown = norightclick;
file:
//-->
</script>

P. S. Skrypt nie wyświetla alertu. Takie wyskakujące okienka są, moim skromnym zdaniem, bardzo wkurzające - toć przecie user zauważy iż PPM nie działa - po kiego mu to jeszcze mówić/pisać :). Po prostu skrypt pozornie nie robi nic lub raczej robi coć, by nic się nie stało :)

Skrypt chroni tylko przed osobami Nieznającymi-Się-Na-Tworzeniu-Stron. Mianowicie...

a) dla grafiki
...jeśli nie można otworzyć menu kontekstowego można przeciągnąć go na pasek adresu, do zaawansowanego programu graficznego lub chociażby na pulpit. Z tego poziomu zapisanie nie jest już trudne (w razie tego trzeciego wręcz niepotrzebne :)).

b) dla tekstu
...jak ktoś wie o istnieniu skrótów klawiszowych podejmie próbę kopiowania za pomocą [CTRL]+[C]. Oczywiście to też można zablokować - patrz wyżej.

Ponadto nie chroni nawet źródła/kodu strony - opcja jest dostępna nie tylko w menu PPM.

3. Ochrona grafiki.

ZALETY:

* przy ściąganiu pliku zapisuje się niezamierzony plik.

WADY:
* oczywiście każdy webmaster bez trudu dojdzie do tego, pod jakim adresem znajdzie img.

Myślę, że lepszym wyjściem byłoby użycie tego w wersji uniwersalnej:

<img src=alpha.gif width=100 height=100 style="background:url(prawidlowy_adres_obrazka)">
4. Ochrona adresu e-mail.

Nie wiem po co pisać jakiś długi kod - lepiej stworzyć funkcję...

<script>
function write_email(name,domain) {document.write(""+name+"@"+domain+"");}
</script>

... a potem pisać za każdym razem jedynie:

<script>write_email("severus","dard.pl");</script>
Prostsze, szybsze, krótsze.

5. Dostęp na hasło.

Moim zdaniem wszystkie pomysły z przedostatniego numeru są trudniejsze w eksploatacji (wytłumaczenie niżej) - jak już mamy pisać w PHP to najlepszym pomysłem jest stworzenie takich skryptów, których w kodzie strony oczywiście nie widać... A więc pierwsza strona z formularzem (czysssty HTML)...

<form action=spr.php method=post>
<input name=pass>
<input type=button value="¬"> </form>

... i druga, sprawdzająca...

<?
if($pass) {if($pass=="password") {?>
Kod HTML/tekst, który pojawi się, gdy hasło będzie równe "password".
<?} else {echo "ACCES DANIED!";}} else {echo "Nie podałeś niezbędnych danych...";};
?>

.. w pełni Cię zadowolą :))) Wszystkie dane od razu widzisz - myślę, że tłumacza nie potrzebujesz. Lub raczej mam nadzieję.

WHY?

AD1.
Dlaczego ktoś kiedyś napisał, że źle jest, kiedy wchodzący na podstronę po wpisaniu hasła widzi na pasku adresu owo hasło? Z jakiegoś powodu musi to hasło znać, więc niczego ciekawego, prócz działania skryptu, się nie dowie. A to, że adres mógłby komuś powiedzieć - to tak samo jakby powiedział hasło!

AD2. Wszystko OK. Tyle, że zamiast...

<a onClick="haslo()"><img src="grafika.gif" style="cursor:hand"></a>
prościej napisać:

<img src="grafika.gif" onClick="haslo()" style="cursor:hand">
Aha, pamiętajcie - kiedy hiperłącze ("<a>") ma parametr (" href='' ", np. href=#), wokół obrazka pojawi się zaaaarąbista niebieska ramka (należy napisać style="border:0", oczywiście) a "style=cursor:hand" będzie niepotrzebne.