21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
sitole
Profil
Ahoj, vytvářím svůj vlastní "administrační systém"
A říkal jsem si, že když teda něco dělám tak pořádně!
Takže připojení k databázi chci vkládat skrze formulář :)
Co potřebuji?

Mám připravenou stránku s formuláři server.ru/databaze.php
ve kterém mám formulář (řádky přesně na údaje)
Potřebuji aby když zmáčknu tlačítko "Připojit"
se nejdříve databáze uložila do stejného souboru (Případně když nepůjde tak do souboru db.php)
A daný soubor smazat / přepsat kod pro připojení k databázi
ten kod potom budou využívat další skripty v administraci

Myslíte že to půjde? Předem děkuji za každou radu!
Joker
Profil
sitole:
Úplně jsem nepochopil ten postup a proč má být zrovna takový, ale pochopil jsem z toho, že při instalaci uživatel zadá údaje pro připojení k databázi a ty se mají někam uložit.

Takové údaje bych dal do konfiguračního souboru, který bude používat nějaký rozumně zpracovatelný formát (XML, JSON, ini, …) a pak je odtamtud načítal.
sitole
Profil
Joker:
Ano! Ale jedná se o administraci. Administrace = úprava webu = nebezpečí Proto potřebuji, aby se ten soubor ve kterém se to nastavovalo vymazal nebo změnil kod :)

Jinak s tím ukládáním souhlasím :)
webguru
Profil
Ja som dávnejšie použil toto. Možno ti ti pomôže.

install.php
Moderátor Joker: Varování: Uvedený kód v aktuálních verzích PHP nebude fungovat (s PHP ve výchozím nastavení fungoval naposledy v roce 2002) a pokud nefunkčnost opravíte, je velmi nebezpečný, viz níže.

<html>
<head><link rel="shortcut icon" href="po/favicon.ico" >
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Inštalácia</title>
</head>
<body>
<br><br>

<table width="50%" border="0" cellspacing="0" cellpadding="1" align="center" bgcolor="Black"><tr><td>
<table width="100%" border="0" cellspacing="0" cellpadding="3" align="center" bgcolor="lavender">
<tr bgcolor="silver"><td colspan="2" class="tabulkanadpis">
Inštalácia -  <?$mesic = (int)Date("m");echo Date("j. " . $mesic . ". Y, H:i")?>
</td></tr>
<tr><td class=tabulka>

<?php
$filename = 'config.php';




if($edit == "ok"){
echo '<center><br><br><b>Bolo vytvorené spojenie pre službu. </b><br><br><center/>'; }
else {
if (file_exists($filename)) {
    echo "<font color='green'>$filename je načítaný</font> - <a href='install.php?start=ok'>Zobraziť</a>";
} else {
    echo " <font color='red'><b>$filename neexistuje</b></font> - <a href='install.php?start=ok'>Kliknite SEM pre vytvorenie</a>";
}

    echo "<BR>";
if($start == "ok")
echo '<br><form method="post" name="send">
<textarea name="beleir" style="width: 500px; height: 115px;">
<?php
           $dbserver=""; 
           $dblogin="";       
           $dbheslo="";    
           $dbnazev="";     ?>
</textarea><br><br>Treba doplniť údaje...<br><br>
<input name="send" type="submit" value="Ulož!">
</form>';

if(isset($_POST['send']))
{ 
$soubor = FOpen('./config.php', 'w');
fwrite($soubor, stripslashes($beleir));
fclose($soubor);


 echo '<script type="text/javascript" for="window" event="onLoad()">
        <!--
            window.location.href="install.php?edit=ok"
        // --> </script>';    
}

}

?>
</td></tr>

</table></td></tr></table>
</form>

Nie je 100%, ale funguje a vztvorí ti zložku config.php.
sitole
Profil
webguru:
Ou.. neví mzda jsi mě pochopil tak dobře, nebo se nevyznám v kodě..
Tady je příkald (nahrál jsem to tam)
sitole.tk/instalace/install.php

Jaksi nejde soubor vytvořit.. A navíc jsem tam nenašel formuláře
Joker
Profil
Takže když chce být správce důsledný v zabezpečení a občas měnit heslo k databázi, bude muset pokaždé přeinstalovat CMS?
To nezní moc přívětivě :-)

Možná by bylo lepší pro změnu databázových údajů vyžadovat potvrzovací kód zaslaný e-mailem, nebo tak něco.

Co se týká rozlišení stavu, jestli už něco je nastavené, stačí se jednoduše podívat do toho konfiguráku.
Něco na způsob:
if (!empty($config->getValue("sqlDBName"))) { // Už bylo nastaveno

webguru:
Použití uvedeného skriptu nelze doporučit, je tam více závažných problémů.
edit: Pro jistotu jsem k němu přidal varování.

1. Asi největší „WTF“: Nastavení připojení k databázi realizované formulářovým polem pro zapsání PHP kódu… to jako vážně? Správce webu vůbec nemusí PHP umět (ostatně právě proto chce asi používat CMS, aby si to nemusel sám programovat), přitom stačí jeden překlep a přestane mu fungovat prakticky všechno (když předpokládám, že nastavení databáze se bude načítat skoro všude).
Další špek je, že kdyby to něco do souboru zapisovalo (viz níže), prohnalo by to zapisovaný obsah přes stripslashes. Takže pokud by třeba heslo obsahovalo uvozovku a správce by dokonce znal PHP a správně by napsal \", stripslashes mu z toho vyrobí syntaktickou chybu a opět přestane prakticky všechno fungovat.
Je to uživatelsky velmi nepohodlné a extrémně nebezpečné.

2. Naštěstí ten kód vůbec nefunguje. Používají se tam nedefinované proměnné např. $beleir, $start nebo $ok, čili typicky to nic neudělá. Maximálně lze dosáhnout toho, že to vyrobí prázdný soubor config.php, nebo (pokud ten soubor existuje) smaže jeho stávající obsah.
Nejspíš ten kód spoléhá na register_globals a magic_quotes_gpc.
Takže poslední verze PHP, kde to funguje s výchozím nastavením, je 4.1.2 z března 2002.
Od PHP 5.4 to nefunguje nikdy.

3. Sice se tam ověřuje existence toho souboru, ale ne při tom ukládání, takže když pošlu $_POST["send"], klidně to přepíše i existující soubor.
Čili asi jediné, co ten skript reálně umí, je smazat obsah souboru config.php.
Kdyby na řádku 47 bylo správně $_POST["beleir"] a nebylo stripslashes, umožní to vložit libovolný PHP kód do souboru, který se pak (předpokládám) vkládá skoro na všechny stránky. Lepší bezpečnostní díru si těžko představit.

Potom jsou tam chyby, které nejsou tak fatální, např. přesměrování přes JavaScript, nebo že je tam sice proměnná $filename pro název souboru, ale ve skutečnosti se pro název ukládaného souboru nepoužije, ale to už asi nemá cenu rozebírat.
webguru
Profil
Tak ja som aj písal že to nie je 100% funkčné, nech si to preštuduje a upraví, alebo som mu mal poskytnúť už hotové riešenie, resp vyhladať mu to v googli?
sitole
Profil
No, když někdo bude chtít být bezpečný.. Dokáže si to upravit v souboru (jako WP)
Ale případně neodmítám ani tu druhou verzi "mejlem".

Jak tedy udělám

Zapsání do databáze + email (na který poté budou zasílány upomínky)
Zápis té databáze do soubou ze kterého ho budou moci čerpat ostatní skripty.
Ověření příště pomocí toho emailu :)
Joker
Profil
webguru:
nech si to preštuduje a upraví, alebo som mu mal poskytnúť už hotové riešenie

Jenže tam nejde o doladění nějakých detailů, z toho skriptu se nedá převzít prakticky nic, i jeho základní idea je chybná. Přepracovat ho do správné podoby by stálo víc času, než to napsat celé znovu.

sitole:
No, když někdo bude chtít být bezpečný.. Dokáže si to upravit v souboru (jako WP)
V tom případě se stejným způsobem může dělat i ta instalace.

Ale na tom co jsem psal může být postavená i ta varianta, která neumožní údaje editovat.
Prostě se zkontroluje, jestli údaje už existují a pokud ano, skript skončí.

Jinak ten algoritmus je v podstatě jednoduchý, když se od toho oddělí samotné to načítání a ukládání konfigurace, což bych doporučil, a zpracování se nechá na vestavěné knihovně pro daný formát dat.
sitole
Profil
Joker
Tak super.. chápu večkeré klady a pritiklady, ale stále nevím jak to udělat :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0