Autor | Zpráva | ||
---|---|---|---|
SkyVessel Profil |
Ve formuláři zadávám jméno uživatele, které se má smazat:
if (isset($_POST['del'])) { //zpracování formuláře if (isset($_POST['jmeno_del'])) { if ($_POST['jmeno_del'] != "") { $jmeno_del = trim($_POST['jmeno_del']); } $dotaz = "SELECT id FROM users WHERE jmeno='$jmeno_del'"; $vysledek = @mysql_query($dotaz); if (mysql_num_rows($vysledek) == 1) { //jestli se nick nachází v databázi $dotaz = "DELETE FROM users WHERE jmeno ='$jmeno_del'"; $vysledek = @mysql_query($dotaz); //spustit dotaz rmdir ("private/$jmeno_del"); //smaže adresář if ($vysledek) { $zprava = $zprava."Uživatel $jmeno_del byl smazán.<br>"; echo $zprava; } } else { $zprava = $zprava.'Vyplň jméno ke smazání!<br>'; }}} ... <form action="" method="post" name="delete" id="form_del"> Smazat: <input class="pole" name="jmeno_del" type="text" maxlength="20" > <input name="del" type="submit" value="Smazat"></form> Nevím, jestli jde obyčejný sprostý javascriptový okno nějak propojit s péhápéčkem nebo jestli se to dělá jinak? |
||
Keeehi Profil |
#2 · Zasláno: 13. 7. 2012, 00:23:07
V tomto případě to nemá s PHP co dělat.
Formu stačí přidat: onsubmit="return confirm('Opravdu chcete smazat uživatele '+this.jmeno_del.value+'?')" Je to řešení závislé na javascriptu. Pokud bude vypnutý, smaže se to bez dotazování. |
||
SkyVessel Profil |
#3 · Zasláno: 13. 7. 2012, 15:37:16
Keeehi:
HA! Díky. Věděl jsem, že se to dělá nějak takhle, ale přidat to do formu mě nenapadlo. Díky A ještě jeden dotaz trochu nesouvisející s tématem: Na serveru mám několik souborů php... Většinu mám v kódování utf-8, ale jeden jsem musel předělat do windows-1250, aby to fungovalo dobře. Ovšem u poloviny! utf-8 to hází místo některých českých znaků otazníčky a když změním kódování, tak se to rozbije totálně... Nějaké tipy? |
||
Keeehi Profil |
#4 · Zasláno: 13. 7. 2012, 16:12:03
SkyVessel:
Všechno uložit do utf-8 a poslat tu část kódu, se kterou máš problém. |
||
SkyVessel Profil |
Nemám problém s částí kódu. Prostě mám základní stránku (hlavička, kontrola přihlášení atd...). Tu si nakopíruji a jen měním obsah. Ale některé stránky se prostě zobrazí ok a některé stránky jsou celé místo ž je tam ? ... A menu co mám přes include je ok...
|
||
Keeehi Profil |
#6 · Zasláno: 13. 7. 2012, 16:45:18
Všechny stránky uložte v utf-8. Zajistěte, aby ve výsledném html každé stránky byl v head tento metatag:
<meta http-equiv="content-type" content="text/html;charset=utf-8"> Pak to by to nemělo dělat problémy. |
||
SkyVessel Profil |
Přesně tohle tam mám (teda s mezerou před charset =D). Ale při bližším zkoumání jsem přišel na to, že to dělá jen na stránkách kde přistupuji do databáze... Ale dělá to jen u textu z php kódu - z dbs je to bez problémů (kódování dbs mám utf8_czech_ci)
EDIT: celá db je jako utf8_czech_ci, ale jednotlivé položky (jméno atd) mám nastavení jako cp1250_czech_cs, když to jakkoliv změním, tak se mi to zždy totálně rozsype. Taky mám nastaveno mysql_query("SET NAMES 'cp1250'")... Všude mi to takhle na jiných stránkách jelo bez problémů... A ještě když vytvořím uživatele "ačřčřž" tak do db se uloží jako "ačřčřž" a při výpisu ti tam naháže ty otazníky v čtverci... |
||
Keeehi Profil |
#8 · Zasláno: 13. 7. 2012, 17:21:40
Zkuste po připojení k databázi zavolat:
mysql_query("SET NAMES 'utf-8'"); Jinak jste si jistý, že všechny soubory jsou v utf8? Pokud ne, raději všechny soubory otevřete a znovu uložte v utf8. |
||
SkyVessel Profil |
#9 · Zasláno: 13. 7. 2012, 17:51:49
Takže:
- na všech stránkách mám nastaveno utf8. - na stránkách s přístupem do dbs to místo háčků a čárek píše "U�ivatel" (pouze u textu v php nebo html... ne u dat z dbs) - když mám set_names na windows1250 tak do dbs se ukládá čaj - "xxÄ??™?©" ale s dbs se na stránky normálně vypíše "xxařřžé" - když nastavím set_names na utf-8, tak mi to do dbs uloží čaj a na stránky to vypíše "xx�??�?�" tzn o pár otazníků navíc a ještě k tomu při uládání do dbs to vyhodilo chybu na řádek "if (mysql_num_rows($vysledek) == 0) { //jestli se nick nenachází v databázi" což v dbs nick určitě uložen nebyl... |
||
nemeja Profil |
SkyVessel:
Budete muset sjednotit kodování, bud v souborech nastavíte Windows-1250 a nebo celou DB přehodíte do utf-8, tzn. přeuložit všechny udaje z DB. Na změnu kodování do UTF-8 je tu i funkce autoUTF |
||
Keeehi Profil |
#11 · Zasláno: 13. 7. 2012, 17:56:56
SkyVessel:
Problém může být v tom, že už data v databázi jsou pochroumaná. Když teď po sjednocení vložíte přes stránky do databáze nová data, ta nová data by se už měla zobrazovat správně. „pouze u textu v php nebo html“ Nejlepší bude živá ukázka. |
||
SkyVessel Profil |
#12 · Zasláno: 13. 7. 2012, 19:05:42
Všechno upraveno na utf-8 - php, set_names i databáze. Do dbs jsem uložil xaéíáýžřč - v dbs je čaj ale vypisuje to správně. � jsem se ale nezbavil - viz obrázek. Jestli chcele live prewiew... tak private.nejenweb.cz
|
||
Keeehi Profil |
#13 · Zasláno: 13. 7. 2012, 19:33:43
Soubor login.php nemáte uložen jako utf-8 ale jako windows-1250. (popřípadě includované soubory nemáte uložené správně)
Ale problém se nebude týkat jen souboru login.php ale i toho souboru, co je na 3. obrázku a možná i dalších. Nevím, jak se snažíte o uložení v utf8, ale rozhodně se vám to nepovedlo. Stáhněte si třeba PSPad. S tím jsem neměl problémy. Soubor stačí otevřít, nahoře v menu kliknout na Formát > klinkout na utf8, pak soubor uložit a zavřít. |
||
SkyVessel Profil |
#14 · Zasláno: 13. 7. 2012, 19:52:27
PSPad používám. Vše je jako utf-8...
Když jsem to zkusil změnit na windows1250 tak se nic nestalo. Ani v jiných prohlížečích. Když změním kodovaní v prohlížeči, tak se trojúhelníčky opraví, ale zase se pochopitelně rozhážou znaky z databáze... Nepomohlo ani nové vytvoření souborů php přímo jako utf8... |
||
Keeehi Profil |
#15 · Zasláno: 13. 7. 2012, 19:55:20
SkyVessel:
Tomu se mi nechce věřit. Zabalte ty soubory do archivu a někam to nahrajte. |
||
SkyVessel Profil |
Fakt si s tím nevím rady... zde je archív
heslo: *** |
||
Keeehi Profil |
files.cejhon.cz/dat_uloziste.rar heslo stejné
4 soubory byly kódované jako windows-1250. To že je u nich v PSPadu u utf8 pod nabídkou ve Format takové to zatržítko ještě neznamená, že je i soubor v utf8. Jaké je skutečné kódování se zjistí dole ve stavovém řádku. |
||
SkyVessel Profil |
#18 · Zasláno: 13. 7. 2012, 21:14:10
Keeehi:
wow... čím víc se toho člověk dozvídá, tím víc chápe, jak málo toho ví =D ...takže jak se to teda překope do toho utf8?? Musím vytvořit nový soubor?? |
||
Keeehi Profil |
Stačí na to znovu klepnout i když je to zatržené. A dole ve stavovém řádku uvidíš změnu. Pak stačí jen uložit.
A nebo si stáhnout ten archiv. Tam už jsem to upravil. |
||
LaMMa Profil |
#20 · Zasláno: 13. 7. 2012, 21:27:26
SkyVessel:
Ak ti môžem poradiť, ošetri si postnuté hodnoty v login.php |
||
SkyVessel Profil |
Keeehi
mg... já na to klikal jak praštěný!??!... no nic - teď už vím, k čemu je ten stavový řádek =o). A byl to ten problém - kódování je v pohodě, akorát do té databáze se to ukádá stále jako čaj - předpokládám že to je v tom windows1250 - má to cenu něco s tím dělat? respektivě jak to ošetřit, když mám dbs nastavenou na utf8 a nepomáhá to... Jinak Keeehi, dávám ti palec nahoru nebo něco takového... Díky moc!! <3 EDIT: to v té dbs by asi šlo opravit tím ošetřením $_post jak psal LaMMa? |
||
LaMMa Profil |
Ošetri
$_POST y pri dotazoch do DB napr. mysql_real_escape_string($_POST['...'])
|
||
Keeehi Profil |
$dotaz = "SELECT id, jmeno, datum_expirace FROM users WHERE jmeno='".mysql_real_escape_string($jmeno)."' AND password='".mysql_real_escape_string($pass)."'"; tester' -- ' a k tomu jakékoli heslo, tak ho to přihlásí. Schválně to sám vyzkoušej.Jinak jsou tem i jiné bezpečnostní problémy. Třeba soubor register.php není chráněn přihlášením, takže i nepřihlášení by mohli teoreticky mazat atd. Sice by museli vědět, že musí poslat POST požadavek del=xyz&jmeno_del=tennick, ale nemusí být přihlášení. Navíc i v tomto souboru jsou neooštřené vstupní proměnné. |
||
SkyVessel Profil |
#24 · Zasláno: 13. 7. 2012, 22:32:15
Keeehi:
„nemusí být přihlášení“ Tam ověřuji můj nick u proměnné post... tzn jestli jsem přihlášen JÁ... |
||
Keeehi Profil |
SkyVessel:
To sice ano, ale po header na 22. řádku script nekončí a zpracovává se dál. Tohle dost začátečníků neví a myslí si, že to tím přesměrováním končí. Správně by jsi za tím měl mít ještě příkaz exit; Pak už by to bezpečné bylo.Ještě to menu.inc by jsi si měl přejmenovat na php. Je ti vidět do kódu. No aspoň že upload je zabezpečený a nedají se tam nahrát scripty. I když by se to dalo zapsat úsporněji (s využitím in_array), ale aspoň že takhle. No zkrátka celá web je děravější, než cedník. Viz přihlašovací data do databáze, která se mi podařilo získat. DEFINE ('DB_UZIVATEL', 'w20*******a'); DEFINE ('DB_HESLO', 'Tb*****P'); DEFINE ('DB_HOSTITEL', 'w*********.net'); DEFINE ('DB_DATABAZE', 'd20*******a'); Aspoň že ta hesla v databázi hashuješ. Jak jsem se k těm údajům dostal? Využil jsem souboru down.php Má jen pár řádků, zkus přijít na to jak. Je pravda, že bez těch zdrojových kódů, co jsem měl k dispozici by mi to trvalo mnohem déle, nebo bych na to vůbec nepřišel, protože pak je to někdy o tom si dobře tipnout, ale alespoň vidíš, kde všude máš bezpečnostní problémy. Jen aby sis nemyslel, že to je všechno. Zas tak důkladně jsem to nestudoval. Jen jsem spíš kouknul, kde by mohl být problém a většinou tam byl.- |
||
SkyVessel Profil |
ad 1) díky, opraveno a poznačeno :)
ad 2) ups... tahle to mám z jedné knihy, ale vzpomínám si, že to tam bylo nějak ošetřeno v adresářové struktuře nebo tak něco... moje chyba. opraveno. ad 3) ... no jak hacknout web jsem se taky neučil - moje chyba jak vidím =D. No napadá mě jedině, že jsi mi do proměnné nacpal nějak na sílu jinej adresář, který ti to pak ochotně vypsalo a ty už sis v klidu sosal data jako o život?? Trefa? Zabezpečím to trochu více třeba tím, že bych ty data o dbs šoupnul v adresářové struktuře o úroveň výš?? ad 4) díky za kompliment :/... No naštěstí pro mě nejsem zajímavý pro fanoušky zdrojových kódů no a kdyby náhodou ano, tak budou zklamání obsahem =D... Zkusím si to celé projet s knihou v ruce a uvidíme, co ještě vymyslím... |
||
Keeehi Profil |
Odkaz pro stažení je prostý
down.php?down=../mysql_connect.php - prostě stačí, když v celé proměnné $_GET["down"] nebude lomítko.
Pravidla diskuse JPW a doporučení |
||
SkyVessel Profil |
#28 · Zasláno: 14. 7. 2012, 00:25:36
Keeehi:
„Odkaz pro stažení je prostý“ Zvláštní... Ať se snažím, jak se snažím, tak mi to přes ten odkaz akorát vysypalo 4x warning?!? =| „prostě stačí, když v celé proměnné $_GET["down"] nebude lomítko.“ nějak jsem zmaten... tam přece žádné lomítko není... lol. Asi jsem unavený =D... ráno moudřejší večera |
||
Keeehi Profil |
#29 · Zasláno: 14. 7. 2012, 00:34:17
SkyVessel:
Možná že je špatně zapsaný název souboru, ale v čem útok spočívá je snad jasné. „tam přece žádné lomítko není“ Ale je. Dokonce jsem ho i zvýraznil. Jinak samozřejmě tím myslím, že v obsahu té proměnné se nesmí objevit lomítko. |
||
SkyVessel Profil |
JOP... už jsem pochopil, jak jsi to myslel... Nedalo mi to spát =oD takže jeslti jsem to tedy pochopil správně:
if (isset($_GET['down'])) { if (StrPos(" ".$_GET['down'], "/") != '0'){ header ("Location: http://". $_SERVER['HTTP_HOST']."/logout.php"); exit(); } else { $soubor = "adresar/".$_GET["down"]; if (!file_exists($soubor)) { header ("Location: http://". $_SERVER['HTTP_HOST']); exit(); } } } |
||
Téma pokračuje na další straně.
|
0