phpRS help fórum : phpRS Fórum
Hlavní diskuzní phpRS fórum. Najdete zde odpovědi na otázky týkající se provozu a instalace phpRS systému.
phpRS - redakční a informační systém
Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: Martinus (IP adresa zaznamenána)
Datum: 2006-05-20, 16:06

Ahoj,

dělám běžecké stránky Kopec , už dlouho chci změnit vzhled, ale nechtělo se mi v tom vrtat. Teď jsem zkoumal PHPRS a myslím že s ním bych se do toho mohl pustit :-) Vyjma hlavního textu na první straně je zbytek stránek generovaný pomocí PHP, takže potřebuji mít možnost spouštět vlastní PHP skripty.
Levý sloupec zobrazím pomocí vlastních pluginů, pravé části zobrazím pomocí Aliasů stránek. V čem vidím problém jsou možné konflikty názvů proměnných, kdy bych mohl změnit nějakou důležitou proměnnou, pokud se trefím do stejného názvu. Koukal jsem letmo na kód PHPRS a hodně se tam používá objektové programování. Já ho nepoužívám vůbec, pokud se v PHPRS používají pouze proměnné v objektech, tak by to mohlo jít. Těch pár proměnných v config.php si zkontroluju, ale procházet haldu kódu PHPRS se mi moc nechce. Ještě je možnost použít v názvech proměnných nějaký prefix, pak by byla záměna vyloučena, ale znamená to přepsat celý kód stránek...

Ještě jsem zkoušel jednu věc, potřebuji poměrně hodně údajů předávat mezi stránkami v URL odkazu (při použití Alisů). Zjistil jsem že tohle

http://localhost/phprs/showpage.php?name=beh&jmeno=martin


nefunguje, ta proměnná $jmeno je při zobrazení stránky bohužel prázdná. Dá se to nějak vyřešit?

I když možná proměnná $jmeno je tak to nejhorší co jsem si mohl vybrat, nemůžu tušit jestli se to někde nepoužívá v PHPRS :o) Teď nejsem u svojeho PC, až tam budu tak to vyzkouším. Ještě mě napadlo když to nebude takhle fungovat, tak upravit hned na začátku skript, showpage.php a uložit ty proměnné z URL řetězce někam bokem...



Celkem upraveno 2×. Poslední úprava Martinus v 20.05.2006 20:10.

Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: JanVar (IP adresa zaznamenána)
Datum: 2006-05-21, 13:00

co takhle?
[http://localhost/phprs/showpage.php?name=beh&jmeno=martin]

-- JaV ---- [http://www.hades.cz] ---- security by obscurity ---------------------------------------------
motto:
It's OK to be ignorant; it's not OK to play stupid.
But it's simply not efficient for us to try to help people who are not willing to help themselves.
----------------------------------------------------------------------------------------------------------------------

Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: Martinus (IP adresa zaznamenána)
Datum: 2006-05-21, 19:12

Bohužel to taky nefunguje. Problém je zřejmě v souboru showpage.php a to sice v tomto řádku, zřejmě obrana proti hacku:

$GLOBALS["name"]=phprs_sql_escape_string($GLOBALS["name"]);

Budu muset tu funkci najít a upravit, ale teď jdu na hokej :o)


Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: MirekS (IP adresa zaznamenána)
Datum: 2006-05-21, 19:19

problem je uplne jinde
showpage zobrazi stranku, pomoci jejiho jmena ulozenou v databazi, takze si zjistuje pouze parametr name a z db k tomu najde ten odkaz, ktery to pak pomoci ReadFile() zobrazi, a pokud byste chteli predat ty dalsi parametry te odkazovane strance, tak byste to museli udelat v te funkci ReadFile()

Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: Martinus (IP adresa zaznamenána)
Datum: 2006-05-21, 20:22

Diky za odpoved, je to zároveň odpověď na můj první dotaz, jestli nemůže nastat konflikt s proměnnými PHPRS. KDyž jsem ve funkci, tak si můžu pojmenovávat proměnné jak chci - to je výhoda. Jelikož samozřejmě používám také funkce včetně volání $GLOBALS, tak jasná nevýhoda je že budu muset přepsat skripty, jelikož moje proměnné v $GLOBALS nebudou a není žádná cesta jak zjistit názvy proměnných o ve funkci o jednu úroveň výš :-( Nebo je můžu zapsat do $GLOBALS s nějakým prefixem, což znamená opět zásah do skriptů.

Díval jsem se co dělá to:

$GLOBALS["name"]=phprs_sql_escape_string($GLOBALS["name"]);


to pouze prožene řetězec v $name přes mysql_escape_string.

Nicméně stále zůstává problém s předáváním hodnot v proměnných předaných v URL řetězci.

Když zkusím:

http://localhost/phprs/showpage.php?name=beh&beh_jmeno=martin


tak pokud v té volané stránce zkusím

echo $GLOBALS["beh_jmeno"];


tak se zase nevypíše nic.

Nicméně pokud to samé napíšu do showpage.php před řádek který vypíše stránku, tak to samozřejmě samozřejmě vypíše:

echo $GLOBALS["beh_jmeno"];

$prchyba=ReadFile($pole_data["hodnota"])


Nevím jak přesně funguje ReadFile(). Znamená to že zevnitř té fuknce ReadFile neuvidím globální proměnné? V tom případě nezbyde než změnit ten soubor showpage aby ten soubor místo ReadFile zobrazil pomocí nějaké mojí funkce, která ten soubor načte přes Include. Jdu testovat.



Celkem upraveno 1×. Poslední úprava Martinus v 21.05.2006 20:59.

Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: Martinus (IP adresa zaznamenána)
Datum: 2006-05-21, 21:26

Vypadá to že mám vyřešeno :-)

Stačila malá změna souboru showpage.php, asi takto

<?php

######################################################################
# phpRS ShowPage 1.2.0
######################################################################

// Copyright (c) 2001-2005 by Jiri Lukas ([email]jirilukas@supersvet.cz[/email])
// [http://www.supersvet.cz/phprs/]
// This program is free software. - Toto je bezplatny a svobodny software.

// vyuzivane tabulky: rs_alias

define('IN_CODE',true); // inic. ochranne konstanty

include_once("config.php");
include_once("myweb.php");

// tvorba stranky
$vzhledwebu->Generuj();
ObrTabulka();  // Vlozeni layout prvku

// preklad aliasu
if (!empty($GLOBALS["name"])):
  // bezpecnostni korekce
  $GLOBALS["name"]=phprs_sql_escape_string($GLOBALS["name"]);
  // dotaz na alias
  $dotazpage=phprs_sql_query("select hodnota from ".$GLOBALS["rspredpona"]."alias where alias='".$GLOBALS["name"]."' and typ='sablona'",$GLOBALS["dbspojeni"]);
  if ($dotazpage!=0&&phprs_sql_num_rows($dotazpage)>0):
    // nacteni dat
    $pole_data=phprs_sql_fetch_assoc($dotazpage);
    // zobrazeni textoveho souboru
    if(File_Exists($pole_data["hodnota"])):
       include ($pole_data["hodnota"]);
    else:
     // CHYBA: Pozadovana stranka nenalezena!
     echo "<div align=\"center\">".RS_SW_ERR2."</div>\n";
    endif;
  else:
    // CHYBA: System nemuze identifikovat pozadovanou stranku!
    echo "<div align=\"center\">".RS_SW_ERR1."</div>\n";
  endif;
else:
  // CHYBA: System nemuze identifikovat pozadovanou stranku!
  echo "<div align=\"center\">".RS_SW_ERR1."</div>\n";
endif;

// dokonceni tvorby stranky
KonecObrTabulka();  // Vlozeni layout prvku
$vzhledwebu->Generuj();
?>


Při vkládání aliasu je nutné zadávat relativní adresu k souboru.
Pak jsou zevnitř volaného souboru vidět globální proměnné, ovšem tahle úprava je nebezpečná v tom, že poskytuje přístup ke všem proměnným PHPRS bez nutnosti volání přes $GLOBALS a může dojít ke konfliktu. Ještě sem napíšu bezpečnou verzi řešenou přes funkci...



Celkem upraveno 1×. Poslední úprava Martinus v 21.05.2006 21:30.

Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: Martinus (IP adresa zaznamenána)
Datum: 2006-05-21, 21:45

A ta druhá verze je zde:

<?php

######################################################################
# phpRS ShowPage 1.2.0
######################################################################

// Copyright (c) 2001-2005 by Jiri Lukas ([email]jirilukas@supersvet.cz[/email])
// [http://www.supersvet.cz/phprs/]
// This program is free software. - Toto je bezplatny a svobodny software.

// vyuzivane tabulky: rs_alias

define('IN_CODE',true); // inic. ochranne konstanty

include_once("config.php");
include_once("myweb.php");

// tvorba stranky
$vzhledwebu->Generuj();
ObrTabulka();  // Vlozeni layout prvku

// preklad aliasu
if (!empty($GLOBALS["name"])):
  // bezpecnostni korekce
  $GLOBALS["name"]=phprs_sql_escape_string($GLOBALS["name"]);
  // dotaz na alias
  $dotazpage=phprs_sql_query("select hodnota from ".$GLOBALS["rspredpona"]."alias where alias='".$GLOBALS["name"]."' and typ='sablona'",$GLOBALS["dbspojeni"]);
  if ($dotazpage!=0&&phprs_sql_num_rows($dotazpage)>0):
    // nacteni dat
    $pole_data=phprs_sql_fetch_assoc($dotazpage);
    // zobrazeni textoveho souboru

    function alternativni_showpage($adresa_souboru)
      { if(File_Exists($adresa_souboru)):
          include ($adresa_souboru);
        else:
        // CHYBA: Pozadovana stranka nenalezena!
          echo "<div align=\"center\">".RS_SW_ERR2."</div>\n";
        endif;
      }

  $alternativni_showpage=alternativni_showpage($pole_data["hodnota"]);


  else:
    // CHYBA: System nemuze identifikovat pozadovanou stranku!
    echo "<div align=\"center\">".RS_SW_ERR1."</div>\n";
  endif;
else:
  // CHYBA: System nemuze identifikovat pozadovanou stranku!
  echo "<div align=\"center\">".RS_SW_ERR1."</div>\n";
endif;

// dokonceni tvorby stranky
KonecObrTabulka();  // Vlozeni layout prvku
$vzhledwebu->Generuj();
?>


Při vkládání aliasu je nutné zadávat relativní adresu k souboru.
Tady je to řešené přes funkci, je to bezpečné z pohledu proměnných PHPRS, na druhou stranu ke globálním proměnným je nutné přistupovat přes pole $GLOBALS. Na třetí stranu neznám kód PHPRS, takže jsou zase v ohrožení moje proměnné předané v URL, jež mi může PHPRS změnit. Znamená to použít nějaký prefix při nazývání proměnných předávaných v URL , nebo projet soubory PHPRS souborovým vyhledávačem textu a vyhledávat názvy používaných proměnných.

Za uvedené úpravy nenesu žádnou zodpovědnost, je možné že ve fóru se objeví autor PHPRS a budu "sjet" za "prasení" kódu PHPRS :o))



Celkem upraveno 1×. Poslední úprava Martinus v 21.05.2006 22:16.

Re: Názvy proměnných ve vlastních PHP skriptech
Zaslán uživatelem/kou: Martinus (IP adresa zaznamenána)
Datum: 2006-05-22, 14:37

A ještě přidám ukázku funkce, stačí nahrát do PHPRS upravený soubor showpage, jak je o jeden příspěvěk nahoře.
Pak uložit následující kód třeba jako test.php a pomocí stránkového Aliasu zkusit že opravdu funguje. Alias musí být vložen s relativním odkazem, vyzkoušeno pod PHPRS 2.8.0

<?php

######################################################################
# phpRS zkusebni stranka
######################################################################

if (!defined('IN_CODE')): die('Nepovoleny pristup! / Hacking attempt!'); endif;

$skryvat="ano";  // pokud ano tak se form schová při zobrazení článku, další volba je je třeba $skryvat="ne";
if (($GLOBALS["nazev_casti"]=="") || ($skryvat<>"ano")):  // začátek blokace zobrazení form

?>
<center>Co mám zobrazit?<br>
<form method="GET">
<input type="hidden" name="name" value="<? echo $GLOBALS["name"]; ?>" alt="">
<select name="nazev_casti" size=1>
<option value="1">První část 
<option value="2" >Druhou část
<option value="3" >Třetí část
<option value="4" >Čtvrtou část
</select>
<input type="submit" value="OK" alt="">
</form>
</center>

<? endif;  // konec blokace zobrazení form ?>


<? if($GLOBALS["nazev_casti"]==""): // zobrazime defaultni text ?>
  Tady je default text, není vybraná žádná část
<? endif ?>

<? if($GLOBALS["nazev_casti"]=="1"): // zobrazime 1 cast?>
  Zobrazuji první
<? endif ?>

<? if($GLOBALS["nazev_casti"]=="2"): // zobrazime 2 cast ?>
  Zobrazuji druhá
<? endif ?>

<? if($GLOBALS["nazev_casti"]=="3"): // zobrazime 3 cast ?>
 Zobrazuji třetí
<? endif ?>

<? if($GLOBALS["nazev_casti"]=="4"): // zobrazime 4 cast ?>
  Zobrazuji čtvrtá
<? endif ?>

<? if (($GLOBALS["nazev_casti"]<>"") && ($skryvat=="ano")): // zobrazíme odkaz Zpět ?>
<br><center><a onClick="javascript:history.back()"><u>Zpět</u></a></center>
<? endif ?>



Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.