Autor Zpráva
tester
Profil *
Mám takový problém a nevím jak ho vyřešit. v souboru index.php se includuje toto:

  include_once C::PATH.'/header.php';
  
    if(O::SMALL_INDEX)    
    include_once C::PATH.'/templates/'.C_TEMP.'/sindex.php';
    else     
   include_once C::PATH.'/templates/'.C_TEMP.'/index.php';
    include_once C::PATH.'/footer.php';
už od toho headeru se zobrazuje php kód.
když všechny ty řádky zakomentuju a nechám jen tento:

include_once C::PATH.'/templates/'.C_TEMP.'/index.php';

tak z adresáře s templatem kde mám tento zkušební kód:
<?php if(!defined("C::URL")) die('No acces'); ?><?die("kuk");//if($d->isAccess(O::OPTIONS_TEMPLATE)) {
?>
se v html výstupu prohlížeče zobrazí:
<?die("kuk");//if($d->isAccess(O::OPTIONS_TEMPLATE)) {
?>

Netuším jak to řešit. Jedu dočasně na staré verzi php a nevím jestli to s tím souvisí, ale aplikace kdysi jela na tuto starou verzi tak by snad měla fungovat. Mám něco špatně nastavené v php konfigu?

WAMP5 1.6.6 release
Posted by: collection (---.vnn.vn)
Date: November 03, 2006 02:28PM

Download : [sourceforge.net]

WAMP5 1.6.6
- PHP 5.2.0
Keeehi
Profil
zkus
<?php die("kuk"); ...
tester
Profil *
die("kuk"); vygeneruje "kuk" a jinak prazdnou stranku. Staci pouzit die; před nebo za tím prvním blokem php.

<?php if(!defined("C::URL")) die('No acces'); ?>die;

V dalším bloku kde je podmínka

<?if($d->isAccess(O::OPTIONS_TEMPLATE)) {?>

když dám toto:
<?die; if($d->isAccess(O::OPTIONS_TEMPLATE)) {?>
tak vidím toto:
1 prázdný řádek (nejspíš \r\n) a
<?die; if($d->isAccess(O::OPTIONS_TEMPLATE)) {?>
tester
Profil *
Když sleduju hlavičky tak zjišťuji toto:
první hlavička, soubor "/" v pořádku:
accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Další dvě hlavičky "soubor" je "...php kód..."
accept:image/png,image/*;q=0.8,*/*;q=0.5
accpet-encoding:gzip, deflate

další hlavička je soubor img.php
hlavička požadavku:
accept:image/png,image/*;q=0.8,*/*;q=0.5
accept-encoding:gzip, deflate

chápu to teda tak, že apache neumí interpretovat danou část kódu jako php a domnívá se že je to obrázek...

Ale nevím jak to vyřešit.
Joker
Profil
tester:
die("kuk"); vygeneruje "kuk" a jinak prazdnou stranku.
Čili se kód interpretuje správně.

chápu to teda tak, že apache neumí interpretovat danou část kódu jako php a domnívá se že je to obrázek
Ne.
Hlavičky accept říkají, co preferuje prohlížeč.
Keeehi
Profil
Tak znovu, jakýkoliv PHP kód uvozuj <?php a ničím jiným. <?die je špatně, použij <?php die

Je možné, aby pro označení PHP kódu fungovalo i jen <?. Je však mnohem bezpečnější používat o jen 3 znaky delší <?php
tester
Profil *
Keeehi:
To jsem zkoušel dát místo <? to <?php ale nefungoval mi ten kód to pak píše
Parse error: parse error, unexpected $end in ...\templates\sun\index.php on line 491



Ještě jsem zapomněl napsat že v hlavičce která přichází jak odpověď je chybně vyplněná hlavička je tam jméno konstanty místo její hodnota: C_CHARSET ... To jsem zjistil dnes v noci. V souboru s options přitom není žádný C_CHARSET , tato konstanta by se měla definovat v jazykovém souboru např. v cs.php je

define('C_CHARSET', 'UTF-8');
Keeehi
Profil
tester:
Ta chyba je jasná. Dosáhl jsi svého - PHP kód se začal interpretovat. Ti jsi chtěl. Jen je tam další problém který je potřeba vyřešit, ale původní je úspěšně vyřešen.

Problém je v tom, že PHP došlo na konec souboru ale nečekalo hi tak brzo. Třeba mu tam chybí uzavřená nějaká závorka na kterou pořád čeká.
tester
Profil *
Ne je to jinak. Problém je již vyřešen.

php.net/manual/en/ini.core.php#ini.short-open-tag

Ve verzi PHP 5.2.0 to neumí interpretovat short open tagy což je to o čem jsme se tu bavili. S 5.4.0 by neměl být problém jestli jsem to pochopil z manuálu správně:

"Use of this shortcut required short_open_tag to be on."

Takže bylo třeba zapnout tu directivu v php.ini což jsem prvně udělal na novější verzi php neb jsem to našel v kódu ale při přesunu na nižší verzi php jsem na to zapomněl a toto byl důsledek.
Keeehi
Profil
tester:
Ve verzi PHP 5.2.0 to neumí interpretovat short open tagy
A to je právě to, proč je nebezpečné je používat.

Ne je to jinak
Motáš 2 problémy dohromady. Jedno jsou špatné tahy a to druhé chyba v syntaxi.
tester
Profil *
Keeehi:
O jakém nebezpečí to stále mluvíš? Někdo mi hackne stránku nebo co? Tady jde o to, že stránka nenajede hned po instalaci nebo po updatu na nové php. Máš na mysli spíš komplikace, ty se ale dají ošetřit. Chyba byla na mé straně že jsem si nepřečetl manuál, někde by měl být. Teď když na něj koukám oni tam stejně nepíší že je třeba tu directivu zapnout.
Keeehi
Profil
Je nebezpečí, že ti to nebude fungovat. Na starších verzích byly short_open_tags vypnuté, na novějších jsou defakultně zaplé. Pořád se však dají vypnout. Tudíž když použiješ <? je nebezpečí, že po nahrání na hosting to nebude fungovat. Pokud pouziješ <?php pak ke úplně jedno, jak je nastavená direktiva short_open_tags. Tudíž i pokud by se webhoster rozhodl, že short_open_tags z nějakého důvodu zakáže, nepřestanou ti stránky ze dne na den fungovat.
Joker
Profil
tester:
O jakém nebezpečí to stále mluvíš?

O tom, že short_open_tags nemusí spolehlivě fungovat, jak je vidět i z tohoto vlákna.
tester
Profil *
To ale nemá vliv na bezpečnost. Stránka buď jede nebo nejede. Když nejede tak ji nelze zneužít.
Lonanek
Profil
tester:
Stránka buď jede nebo nejede.
Tak proč tady řešíte 14 příspěvků, podle Vás, nesmyslností. Když nechcete vzít rady vážně, tak nezakládejte vlákna s problémem.

Keeehi se Vám zde snaží intenzivně poradit a navést správným směrem a Joker objasnil "nebezpečí". Co více ještě chcete???
Fisir
Profil
Reaguji na testera:
Potíž je ale v tom, že když se neinterpretuje PHP, je samotný zdrojový kód skriptu (tedy přesně to, co ty vidíš v editoru) odeslán návštěvníkovi. I pokud je tvůj web provozován bezpečně (tj. žádné zjevné bezpečnostní díry v kódu, konfigurace nečitelná webserverem), pravděpodobně není tohle odhalení příliš žádoucí.
Keeehi
Profil
tester:
Navíc spousta začátečníků má třeba přihalšovací údaje k databázi přímo ve scriptu. V případě neinterpretace dojde k jejich vyzrazení.

ač se to může zdát divné, slovo nebezpečí nemusí vždy souviset s bezpečností či zabezpečením
tester
Profil *
Keeehi:
OK, ty short tagy jsou ale pouze v šablonách tak tam snad žádné nebezpečí nehrozí. Jak jinam dát ty přihlašovací údaje?
tester
Profil *
Ty přihlašovací údaje co jsou ve scriptu jsou pro localhost, ale pokud by je tam někdo nechat pro veřejný server mysql tak to je fakt blbost, dík za připomínku.
Keeehi
Profil
tester:
Jak jinam dát ty přihlašovací údaje?
Dají se dát třeba do souboru, který není v části kterou zobrazuje webserver. Od někoho jsem slyšel, že používá systémové proměnné.
Přiznám se, že jsem ale pořádný průzkum na téma "doporučené postupy bezpečného uchovávání přihlašovacích údajů" ještě nestihl provést. Možná tedy existuje lepší řešení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: