Dynamické generování stránky v PHP

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
jansv
Mírně pokročilý
Mírně pokročilý
Registrován: 16. lis 2008

Dynamické generování stránky v PHP

Příspěvek od jansv »

Zdravím, nyní používám na stránkách http://vydelek-klikacky.ic.cz pro generování obsahu na stránce skript s MySQL DB:
http://interval.cz/clanky/dynamicke-gen ... anky-v-php
Po mírné úpravě vypadá můj skript, který používám, takto:

Kód: Vybrat vše

<?
  $kod = "xxxx"; // Napíšeme bezpečnostní kód
  if(IsSet($_GET['strana'])): // Ověříme, jestlie existuje proměnná $strana
  MySQL_Connect("xxx", "xxx", "xxx"); // Připojíme se k databázi
  MySQL_Select_DB("xxx"); // Vybereme databázi
  $vysledek = MySQL_Query("SELECT url FROM strany WHERE id = '$_GET[strana]'"); // Napíšeme SQL příkaz
  
  if(MySQL_NumRows($vysledek) == 1):
  $url = MySQL_Result($vysledek, 0, "url"); // Adresu z databáze zapíšeme do proměnné $url
  else:
  $url = "404.php"; // Pokuď záznam nebyl nalezený, tak do proměnné $url vložíme jinou stránku, např. upozornění na chybu
  endif;
  
  else:
  $url = "uvod.php"; // V případě, ze neexistuje poměnná $strana, vložíme do $url hlavní stránku
  endif; // Ukončíme první podmínku

  require $url; // Vygenerujeme stránku
?>
a návrh tabulky MySQL:

Kód: Vybrat vše

create table strany(
name varchar(50) not null,
id varchar(20) not null,
url varchar(255) not null,
description varchar(255),
PRIMARY KEY(name,id,url));
Je toto řešení vhodné, bezpečné, odolá v pořádku PHP include i MySQL injection?
Není někde nějaká chyba? Je vhodná nějaká jeho úprava nebo nějaké doplnění?
Je vlastně celá stránka dobře zabezpečena? (proti PHP include a MySQL injection)

PS: Chci zůstat u nějakého řešení s MySQL DB.


A ještě, je dobře řešen titulek stránky?

Kód: Vybrat vše

<title><?
switch ($_GET['strana']):
case "uvod": echo "Úvod"; break;
case "penezenky": echo "Elektronické peněženky"; break;
case "neobux": echo "NeoBux"; break;
case "scam": echo "SCAM list"; break;
case "zkusenosti": echo "Zkušenosti"; break;
case "kontakt": echo "Kontakt"; break;
case "odkazy": echo "Odkazy"; break;
default: echo "Výdělek na internetu - klikačky";
endswitch;
?></title>
Prosím o názory a rady, na prvním místě mi jde o zabezpečení (případně co dodělat, ...) proti všem možným útokům (PHP include, MySQL injection, ...).
Díkes.
Naposledy upravil(a) jansv dne úte 7. dub 2009, 18:41, celkem upraveno 1 x.
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Dynamické generování stránky v PHP

Příspěvek od OndraSter »

Snad jediný možný problém bych viděl zde:

$vysledek = MySQL_Query("SELECT url FROM strany WHERE id = '$_GET[strana]'");

To bych nahradil za:

$vysledek = MySQL_Query('SELECT url FROM strany WHERE id = \'' . addslashes($_GET['strana']) . '\'');
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
jansv
Mírně pokročilý
Mírně pokročilý
Registrován: 16. lis 2008

Re: Dynamické generování stránky v PHP

Příspěvek od jansv »

Dobře, udělám. Mohu se zeptat proč? Jinak je celá stránka a script bezpečný proti všem možným útokům?
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Dynamické generování stránky v PHP

Příspěvek od OndraSter »

Pokud není zaplý magic_quotes_gpc tak pokud někdo pošle do SQL něco jako:

SELECT url FROM strany WHERE id = '1' OR '1'='1'

(tzn do $_GET pošle 1' OR '1'='1)

Ale jinak při SELECtu takovémto by to mělo být OK, PHP naštěstí neumí více SQL v jednom dotazu přes mysql_query.
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
jansv
Mírně pokročilý
Mírně pokročilý
Registrován: 16. lis 2008

Re: Dynamické generování stránky v PHP

Příspěvek od jansv »

Jo, základy o PHP include i MySQL injection jsme si četl. Takže takto, s tou úpravou kódu od Tebe to už bude vše OK a bezpečné?
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: Dynamické generování stránky v PHP

Příspěvek od arxeiss »

Kámoš má skript, a normálně používá DB. A má to zabezpečené.

Kód: Vybrat vše

if(isset($_GET['p'])){
  $soubor2=$_GET['p'];
	$soubor=dirname($_SERVER['SCRIPT_FILENAME'])."/".$soubor2.".php";
    if(file_exists($soubor)){
      if(substr_count($soubor2,"../")>0){
        include "error404.php";
      }elseif($soubor2=="index" or $soubor2=="./index" or $soubor2=="/index"){
        include "novinky.php";
      }else{
        include $soubor;
      }
    }else{
      include "error404.php";
    }
}elseif(isset($_GET['g']) or isset($_GET['gs'])){
  include "galerie.php";
}else{
  if(!isset($_GET['p']) and !isset($_GET['g']) and !isset($_GET['gs'])){
    include "novinky.php";
  }
}
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Re: Dynamické generování stránky v PHP

Příspěvek od OndraSter »

Nic by tam hrozit nemělo.
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
jansv
Mírně pokročilý
Mírně pokročilý
Registrován: 16. lis 2008

Re: Dynamické generování stránky v PHP

Příspěvek od jansv »

OK, moc díky za čas.


// OndraSter - není zač
Odpovědět

Zpět na „Programování a web“