Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pytanie o składnie poprawki
Forum PHP.pl > Forum > Przedszkole
fate
Witam businesssmiley.png Mam cos takiego i działa chyba bez wad choc gdzies czytalem ze REFERER moze byc blokowany i nie wiem czy to przekierowanie jest ok:
AD1
  1. <?
  2. header ('Refresh: 3; URL='.$_SERVER['HTTP_REFERER']);
  3. ?>
  4.  
  5. <?
  6. echo 'Tlumaczenie w trakcie... strona dostępna wkrótce.<br />Za chwilę nastąpi przekierowanie...';
  7. ?>
  8. <? echo '<a href="'.$_SERVER['HTTP_REFERER'].'"> Powrót/Return </a>';?>

I miałem problem z własnoręcznym wykombinowaniem tego prostego kodu zw na skladnie ciagle mi cos nie dzialalo. Wytlumaczy mi ktos zwieźle dlaczego w linku po REFERER'] jest . ' a przy już header ma nie byc?!
Jestem nowicjuszem czytajac tutoriale nie wchodzi mi nic lepiej mi sie uczy czytajac i przerabiajac gotowe kody wiec prosilbym o konkretna odpowiedz zamiat zaganiania do nauki chyba ze naprawde lopatologiczny kurs krok po kroku:)

AD2
2 problem rowniez chyba składniowy mialem zeby wstawić w ten kod refresha, gdyby ktos mi mógł rozjaśnić czy się dało do tego 'location' wmontowac i jak?
  1. <?php
  2. function adres(){
  3. $dane=$_SERVER['HTTP_REFERER'];
  4. return $dane;
  5. }
  6.  
  7. header('Location:'.adres());
  8.  
  9. ?>


AD3
lub czy dalo sie jakos tak zeby nazwe tej funkcji wmontowac w ponizszy header bo tez nie umialem
  1. function adres(){
  2. $dane=$_SERVER['HTTP_REFERER'];
  3. return $dane;
  4. }
  5. header ('Refresh: 3; URL='.adres()']);


AD4
Ze sleepem byl problem ze nie wyswietlalo tekstu czy na poczatku go wrzucalem czy na koncu i czy header byl przed echo czy po tak jakby sleep opoznial tylko header.
Czy nalezalo cos kombinwac z ob_flush?
mam to dla indexu a zapomnialem ze ta strona sie w index nie includuje i uznalem ze to nie to a moze wlasnie to byloby roziazanie.

Bylbym wdzieczny za nauki.. niby działa ale nie lubie niedomówień i chciałbym wiedzieć i zapamietać nerdsmiley.png
Pozdrawiam
KG
jaslanin
1. To wszystko są operacje na stringach, a dokładnie to ich łączenie

w linku po $_SERVER['HTTP_REFERER'] chcesz jeszcze dołączyć jakiś nowy string po nim i dlatego musisz dodać kropkę (czyli operator łączenia stringów) i rozpocząć literał ze stringiem który chcesz dodać
w przypadku header nie chcesz dołączać za $_SERVER['HTTP_REFERER'] więc nie musisz wywoływać operatora łączenia i wpisywać literału

w header masz

Kod
'Refresh: 3; URL='          .               $_SERVER['HTTP_REFERER']
string literał         łączenie stringów          string ze zmiennej


w linku natomiast masz:

Kod
'<a href="'            .                          $_SERVER['HTTP_REFERER']          .                              '"> Powrót/Return </a>'            
string literał       łączenie stringów            string ze zmiennej                łączenie stringów                  literał


więcej info masz tu:
http://www.php.net/manual/en/language.types.string.php

2.

Mówiąc prosto refresh i location to dwie różne komendy (ściśle są to nagłówki odpowiedzi HTTP), a każda komenda musi być w osobnej linijce w nagłówku więc nie da się ich połączyć. więcej masz:
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Location od razu przekierowuje na jakąś stronę
Refresh robi to samo co samo co Location, tylko najpierw czeka 5 sekund

wydaje mi się że wystarczy że po prostu zmienisz location na refresh i będzie działało tak jak chcesz, ale napisz dokładnie o co Ci chodzi

3.

  1. function adres(){
  2. $dane=$_SERVER['HTTP_REFERER'];
  3. return $dane;
  4. }
  5.  
  6. header ('Refresh: 3; URL=' . adres() );


Nie wiem po co na końcu próbowałeś wykonywać odwołanie do tablicy podobne do $_SERVER['HTTP_REFERER'] (to jest odwołanie do elementu HTTP_REFERER tablicy $_SERVER, musisz przeczytać jakiś kurs podstaw PHP bo bez pewnej wiedzy nie da się robić rzeczy po prostu próbując, dlatego najpierw dzieci się uczy liczenia od jeden do dziesięć, a nie każe im się od razu całki rozwalać)


4. nie wiem o co Ci dokładnie chodzi, ale chyba tak. Dodatkowo odnośnie tej funkcji to nie gwarantowane jest że ona zadziała niektóre przeglądarki i antywirusy blokują tą funkcjonalność ze względów bezpieczeństwa

dodatkowo w ramach bezpieczeństwa, HTTP_REFERER jest daną przekazywaną przez użytkownika, więc nie można jej ufać, atakujący Twoją stronę może wykorzystać to by przekierować użytkownika na spreparowaną stronę podobną do Twojej i wykraść jego dane (zwykle ludzie nie patrzą na zmieniający się adres URL), więc musisz sprawdzać czy dane w tej zmiennej nie są zfałszowane
fate
Dzięki wielkie jaslanin +
Bardzo mi to wszystko rozjaśniłeś. Widzę że nie wdrapałem się nawet na 1 schodek z php coś czuję że nigdy mistrzem nie będę ale spróbuję sie podszkolić i opanować podstawy - hobbystycznie. Bezpiecznej stronki i tak wiem, że samodzielnie nie wykonam ale może nikt bez powodu nie bedzie mnie atakował choc pojecia nie mam czy to powszechne czy raczej zadkie zjawisko.
Ad1
doczytam bo troche nie łapie dlaczego to co w echo ' ' nie moze byc traktowane jako 1 string tylko musze łączyc spodzieam sie ze dlatego iz mam literały i stringi zmiennej.
Ad2
Odpowiedz mam w 3 akapicie
Ad3
To byla kolejna próba (oddzielna) te wszystkie kody nie były razem w pliku - chyba odpowiedziałem nerdsmiley.png
Ad4
Czy wspominales o ob_flush czy o sleep z tym blokowaniem przez antyviry spodziewam sie ze raczej flush?
ze sleepem mialem problem ze byl bialy obraz nie wykonywalo sie echo z linkiem niezaleznie gdzie stawialem sleepa ale chyba dlatego ze header wykonuje sie jako 1

Rozumiem ze nie ma za bardzo w PHP alternatywy do HTTP_REFERER a wiec jak wykonac takie sprawdzenie czy dane nie sa sfalszowane ( oczym poczytac)?
Jeszcze raz dziekuje za naprawde wyczerpujace odpowiedzi, dobry z Ciebie człowiek zakochany.gif
Pozdrawiam
KG
jaslanin
Najszybszą drogą do sukcesu jest podwojenie ilości błędów, które popełniasz. Thomas J. Watson
Niemniej jednak bez przeczytania jakiegoś kursu dla początkujących w PHP który by pokrywał podstawy programowania, nabawisz się wielu frustracji. Jak już się nauczysz podstaw w jednym języku to w dużej mierze pewne koncepcje się powtarzają. Możesz się też zapisać np. na kurs: http://www.udacity.com/overview/Course/cs101 i w siedem tygodni napisać swoją wyszukiwarkę podobną do google (z początków firmy), wykładowcą jest profesor z uniwersytetu w USA, albo o PHP http://devzone.zend.com/6/php-101-php-for-...olute-beginner/

ad.1

nie wiem czy dobrze cię rozumiem ale jeżeli masz tak:

  1. $var = 'asdf';
  2. echo 'blablabla asd' . $var;


to w echo masz dwa stringi które musisz dopiero połączyć w jeden (odpowiednio skleić)

możesz też robić coś takiego:

  1. echo "This is $great";


itd. http://www.php.net/manual/en/language.type...parsing.complex

odnośnie jeszcze samego pisania kodu z PHP z HTML to lepiej robić to tak:

  1. <div class="user_controls">
  2. <?php if ($user = Current_User::user()): ?>
  3. Hello, <em><?php echo $user->username; ?></em> <br/>
  4. <?php echo anchor('logout', 'Logout'); ?>
  5. <?php else: ?>
  6. <?php echo anchor('login','Login'); ?> |
  7. <?php echo anchor('signup', 'Register'); ?>
  8. <?php endif; ?>
  9. </div>
  10.  
  11. <h1>My Message Board</h1>
  12.  
  13. <?php foreach($categories as $category): ?>
  14.  
  15. <div class="category">
  16.  
  17. <h2><?php echo $category->title; ?></h2>
  18.  
  19. <?php foreach($category->Forums as $forum): ?>
  20.  
  21. <div class="forum">
  22.  
  23. <h3>
  24. <?php echo anchor('forums/'.$forum->id, $forum->title) ?>
  25. (<?php echo $forum->Threads->count(); ?> threads)
  26. </h3>
  27.  
  28. <div class="description">
  29. <?php echo $forum->description; ?>
  30. </div>
  31.  
  32. </div>
  33.  
  34. <?php endforeach; ?>
  35.  
  36. </div>
  37.  
  38. <?php endforeach; ?>


Inne podobne porady:
http://net.tutsplus.com/tutorials/html-css...-readable-code/

4. Tak chodzi mi o flush, antiviry to trochę uproszczenie, raczej programy do kompleksowego zabezpieczania komputera. One na to nie pozwalają bo zanim pokażą użytkownikowi stronę muszą ją w pełni sprawdzić, a nie tylko częściowo.


Odnośnie referer'a to zawsze musisz założyć że może być pusty (musisz zdecydować co wtedy chcesz zrobić) lub zafałszowany (musisz go sprawdzić, zresztą żadnej danej otrzymanej od użytkownika ufać nie możesz, zawsze musisz sprawdzać i zabezpieczać).

Jednym ze sposobów jest np. ograniczenie działania do jakichś domen np. poprzez użycie parse_url

ważną sprawę jest by nie sprawdzać czy zmienna HTTP_REFERER jedynie zawiera nazwę domeny bo można to ominąć np. tak dla domeny "domena.pl"

domena.pl.jestem-hakerem.pl/ukradne_ci_orzeszki.html

proste sprawdzanie tego nie wyłapie

należy robić to tak:

  1. <?
  2.  
  3. $_SERVER['HTTP_REFERER'] = 'http://forum.php.pl/Przedszkole_f27.html'; // Nie powinno sie zmieniac tak zmiennych systemowych w normalnym kodzie
  4. //$_SERVER['HTTP_REFERER'] = 'http://forum.php.pl.hacker.com/Przedszkole_f27.html';
  5. //$_SERVER['HTTP_REFERER'] = 'http://hacker.com/forum.php.pl.html';
  6.  
  7. if ($_SERVER['HTTP_REFERER'] != '') {
  8. $host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
  9.  
  10. if ('forum.php.pl' == $host) {
  11. echo "ok";
  12. } else {
  13. echo 'not ok';
  14. }
  15. }
  16. ?>


Możesz jeszcze przeczytać:
http://net.tutsplus.com/tutorials/php/30-p...-for-beginners/
https://www.owasp.org/index.php/Cheat_Sheets
http://www.udacity.com/overview/Course/cs101
http://devzone.zend.com/6/php-101-php-for-...olute-beginner/

+++ http://www.zend.com/en/download/487 (możesz się zainteresować działem secuirty, pozatym jest to ogólny przegląd różnych umiejętności programisty, trzeba się zarejestrować by pobrać)
fate
Witam
Dzięki za mnóstwo ciekawych linków i porad poczytam sobie. Jestem narazie po 1 kursie online po Polsku i przyznam ze wszystko mi za 1 nie weszło ze zrozumieniem. Bardzo mnie odrzucało od php.net ale teraz już udaje mi się to rozczytać i sie już nie lękam headsetsmiley.png powoli się oswajam.
Korciło mnie kilkukrotnie aby napisać tu kolejny temat i otrzymac gotowca ale udało mi się dobrnąć samodzielnie i rozwiązać parę problemów więc jestem chyba na dobrej drodze.
Pozdrawiam, Dzieki jeszcze raz. Nie mam więcej pytań.
greycoffey
Cytat(jaslanin @ 11.04.2012, 20:51:05 ) *
Odnośnie referer'a to zawsze musisz założyć że może być pusty (musisz zdecydować co wtedy chcesz zrobić) lub zafałszowany (musisz go sprawdzić, zresztą żadnej danej otrzymanej od użytkownika ufać nie możesz, zawsze musisz sprawdzać i zabezpieczać).

Jednym ze sposobów jest np. ograniczenie działania do jakichś domen np. poprzez użycie parse_url

ważną sprawę jest by nie sprawdzać czy zmienna HTTP_REFERER jedynie zawiera nazwę domeny bo można to ominąć np. tak dla domeny "domena.pl"

domena.pl.jestem-hakerem.pl/ukradne_ci_orzeszki.html

proste sprawdzanie tego nie wyłapie

należy robić to tak:

  1. <?
  2.  
  3. $_SERVER['HTTP_REFERER'] = 'http://forum.php.pl/Przedszkole_f27.html'; // Nie powinno sie zmieniac tak zmiennych systemowych w normalnym kodzie
  4. //$_SERVER['HTTP_REFERER'] = 'http://forum.php.pl.hacker.com/Przedszkole_f27.html';
  5. //$_SERVER['HTTP_REFERER'] = 'http://hacker.com/forum.php.pl.html';
  6.  
  7. if ($_SERVER['HTTP_REFERER'] != '') {
  8. $host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
  9.  
  10. if ('forum.php.pl' == $host) {
  11. echo "ok";
  12. } else {
  13. echo 'not ok';
  14. }
  15. }
  16. ?>


Skąd takie przeczulenie dotyczące danych przesyłanych przez użytkownika? W tym celu to nie ma sensu. To się dzieje, jedynie gdy ktoś sam majstruje przy refererze - jak atakujący miałby ustawić ofierze referera? Preparacja żądania AJAXowego nic nie da przeca, a jak ktoś wejdzie tam z innego linku, przekieruje go spowrotem wink.gif Nawet nie można tego wykorzystać do maskowania podejrzanych urli, jak na pewnym znanym protalu społecznościowym można było wywołać http://example.com/redirect?url=http://zuo...and_destroy.zuo.
Fajnie, że zwrcasz uwagę na bezpieczeństwo, ale też dobrze czasami iwedzieć, gdzie używać zabezpieczeń i jakich, a gdzie wcale wink.gif
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.