Autor Zpráva
veredico
Profil
Dobrý den,
mám pro mě nepochopitelný problém s jednou databází… Už jsem hledal snad všude a nic jsem nenašel… Doufám, že mi poradíte.
WordPress 3.4.1.
Linux server
Aktuální SQL
Hosting WEDOS
Aktualizace wordpressu prozatímně není možná.
Nevím kdy přesně se tato akce děje, ale jedná se o zhruba každodenní problém.
Do databáze SQL se vytváří nový zápis, ve kterém je pouze tečka, tento zápis musím skoro každý den mazat.
Netušíte někdo, jak se tohoto automatického zápisu zbavit? Na jiných webech mi toto nedělá. Kontroloval jsem serverový script snad stokrát a nikde v něm chyba není. Tento samý script je i jinde a tento zápis se neprojevuje…
Díky za info a radu…
Keeehi
Profil
Pokud vám ma někdo poradit, bude určitě potřebovat vědět kde se ta tečka objevuje (v které tabulce a v kterém slupci), jaký je její kontext (co za hodnoty je ve stejném řádku v ostatních sloupcích), a jak se její existence projevuje (co by se stalo se stránkami, pokud byste ji nesmazal).
veredico
Profil
$datum = $_POST['datum'];
$text = $_POST['text'];

$con=mysqli_connect("","","","");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_set_charset($con, 'utf8'); // <- add this too
mysqli_query($con, "SET NAMES 'utf8';");
mysqli_query($con, "SET CHARACTER SET 'utf8';");
mysqli_query($con, "SET COLLATION_CONNECTION = 'utf8_unicode_ci';");
// escape variables for security
$datum = mysqli_real_escape_string($con, $_POST['datum']);
$text = mysqli_real_escape_string($con, $_POST['text']);
;
$sql="INSERT INTO blog (datum,text)
VALUES ('$datum','$text')";
if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
mysqli_close($con);

Tečka se vkládá do sloupce text
Jednáse o vkládání textu "blog" mimo administraci wordpressu.

Momentálně přepisuji script do tohoto tvaru:

$
$link = mysql_connect('', '', '');
if (!$link) {
    die('Could not connect');
}
$db_selected = mysql_select_db('', $link);
if (!$db_selected) {
    die ('Can not use db');
}
$datum = mysql_real_escape_string($datum);
$text = mysql_real_escape_string($text);

mysql_query("SET NAMES 'utf8'");
mysql_query("INSERT INTO blog (datum,text) VALUES ('".$datum."','".$text."')") or die(mysql_error())
Keeehi
Profil
Z toho co vidím, není tento script chráněn jakýmkoliv přihlášením. Posláním správného požadavku vám tedy může kdokoliv přidat do databáze nový záznam. Existuje velké množství robotů které prolézají stránky. Někteří jen sbírají informace, jiní se snaží aktivně útočit. Takže máte nakonec celkem štěstí, že se vám tam objevuje jen tečka a nic horšího.
veredico
Profil
Aha, moc děkuji, mohu Vás tímto požádat o přesměrování na stránku, kde najdu správné napsání tohoto scriptu?
Děkuji za info

Mimochodem, tu tečku mi tam tedy vkládal nějaký indexový robot?
lionel messi
Profil
veredico:
Aha, moc děkuji, mohu Vás tímto požádat o přesměrování na stránku, kde najdu správné napsání tohoto scriptu?
V prvom rade treba vytvoriť v databáze nového užívateľa s riadne nastaveným prihlasovacím menom a heslom. Máš na to na serveri oprávnenie?
veredico
Profil
lionel messi:
Mám přístup kompletně do všech částí wordpressu, databáze
lionel messi
Profil
veredico:
Mám přístup kompletně do všech částí wordpressu, databáze
To ešte síce nemusí znamenať, že môžeš vytvárať užívateľov a nastavovať im oprávnenia, ale je to pravdepodobné. Treba skúsiť (či už v rámci Wordpressu alebo priamo na serveri, napr. v PHPMyAdmn) vytvoriť nového užívateľa. Hovorí ti to niečo (robil si niekedy niečo podobné)? Beží ti na serveri PHPMyAdmin?
veredico
Profil
Přímo ve wordpressu mohu vytvářet uživatele a přímo na serveru netuším, kde bych to měl hledat, či zakládat. Na serveru se přihlásím do administrace databáze a mohu vytvářet tabulky atd.
do phpMyAdmin se přihlásím pod "administrátorským?" heslem. (Jde o helso které jsem dostal při registraci na wedosu)
lionel messi
Profil
veredico:
Najprv to pre istotu skús vo Wordpresse tak, ako vieš. Nastav užívateľovi klasicky meno, heslo, prípadne práva (ak máš možnosť) a skús sa pod týmito údajmi pripojiť k databáze a vložiť dáta.

Pre úplnosť, v PHPMyAdmin sa sekcia Užívatelia (Users) nachádza hneď v hornom menu, keďže píšeš, že na serveri nič podobné nevidíš, znamená to, že buď ti tam tento program na správu db nebeží, alebo sa do neho nevieš dostať. Vyskúšaj to zatiaľ radšej cez WP a ozvi sa.

do phpMyAdmin se přihlásím pod "administrátorským?" heslem. (Jde o helso které jsem dostal při registraci na wedosu)
Netuším, ako presne fungujú heslá k tomuto hostingu, v rámci jednotlivých poskytovateľov môžu byť mierne odlišnosti. Administrátorské heslo ale vyskúšaj.
veredico
Profil
lionel messi:
na lokálním serveru jsem to našel, a vytvořil si uživatele bez problémů. Na serveru, kde řeším problém, možnost přidání uživatele v PHP my admin nemohu, tu "kartu" zde ani nemám.

Ve wordpressu, mohu udělat x uživatelů s jakýmkoli oprávněním třeba i s administrátorským.
lionel messi
Profil
veredico:
Ve wordpressu, mohu udělat x uživatelů s jakýmkoli oprávněním třeba i s administrátorským.
Podľa toho, čo som si veľmi rýchlo prečítal o Wordpresse (ktorý nepoznám), užívateľ vytvorený vo WP sa týka iba práce s Wordpressom, čiže to nie je celkom to, čo by si potreboval. Podľa toho, čo píšeš o PHPMyAdmin sa zdá, že oprávnenie vytvárať užívateľov nemáš. Pozri sa ešte na ostrom serveri v PHPMyAdminovi do ľavého stĺpca na zoznam prístupných databáz. Vidíš tam db s názvom mysql?
veredico
Profil
lionel messi
Profil
veredico:
Jasné, oprávnenia na vytváranie užívateľov nemáš. Skús sa ešte pozrieť do znalostnej bázy Wedosu: kb.wedos.com/mysql/prava.html
Keeehi
Profil
veredico:
lionel messi tu dlouho pletl dohromady 2 typy uživatelských účtů které spolu vůbec nesouvisejí. Neštěstí si to už konečně uvědomil. Příspěvky [#6] - [#14] můžeš naprosto ignorovat, jelikož se v důsledku vůbec netýkají tématu.

Aby k nějakému skriptu nemohl každý se typicky řeší ověřením přihlášení na začátku skriptu. Přihlášení lze realizovat mnoha metodami a každá je vhodná pro jiné účely. Pro správnou radu bych potřeboval vědět, pro koho ten skript bude sloužit (do k němu má mít přístup - jen ty?) a k čemu to vlastně slouží.

Ještě by mě zajímalo, proč obcházíš wordpress a nepoužíváš jeho funkce. Pokud ti tam nějaká funkčnost chybí, tak existuje velké množství doplňků které se dají lehce nainstalovat a dá se předpokládat, že budou bezpečnější než to co vytvoříš.
veredico
Profil
Díky za objasnění, vrtalo mi hlavou, proč to po mě chce... :)

ten script ma fungovat jakoby na 2x jedna vezre do jine databaze by mela byt jen pro me a druha verze pro klienty.

wordpress obchazim, protoze... ani nevím... hlavní pointa je v tom, aby se člověk (kolegové) "přihlásil" do stánky, kde může vložit nějaký komentář bez nutnosti vstupovat do wordpressu.

Myslel jsem si že to mám vyřešené tím scriptem co je skoro nahoře, ale problém vkládání té tečky (dělá to tedy ten indexovací robot???), mě nutil to začít řešit, protože se jedná o krátké články z aktuálního dení, které vkládáme jak přes počítač (tam je člověk normálně přihlášen do WP), tak přes mobil... a v mobilu se nám WP ovládá dost mizerně...

Díky za reakci
Keeehi
Profil
Velmi jednoduché přihlášení pomocí http autentizace by mohlo vypadat takto:
$users = array(
    'jmeno1' => 'heslo1',
    'jmeno2' => 'heslo2'
);

if (!isset($_SERVER['PHP_AUTH_USER']) or !isset($_SERVER['PHP_AUTH_PW']) or !isset($users[$_SERVER['PHP_AUTH_USER']]) or $users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW']) {
    header('HTTP/1.0 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Login"');
    echo 'Chyba prihlaseni - zadejte platne uzivatelske jmeno a heslo!';
    exit;
}
veredico
Profil
Keeehi:
Aha, super! Dekuji!
Jdu to hned prozkoumat :)


Chtěl bych se zeptat, z toho zápisu nejsem nikterak moudrý... Mohu se tedy zeptat, jak s tímto kódem pracovat?

'jmeno1' bude treba franta... vytvorim si nejaky formular kde budou pole name="jmeno1" potom v dalsim inputu bude name="heslo1"

zavolam si tedy ty hodnoty jako
$jmeno1 = $_POST ['jmeno1'] ?

respektive, jak reknu teto casti kodu
$users = array(
    'jmeno1' => 'heslo1',
    'jmeno2' => 'heslo2'
);
z jakeho mista si ma vzit hodnoty.

Potom ještě netuším, do jaké části mám vložit například:
1, adresu na soubor ve kterem budu psat ty clanky
2, primo <form> pro odesilani

Děkuji za objasnění. :)
Keeehi
Profil
veredico:
Je to vytvořené tak, aby jsi nemusel vytvářet žádný formulář pro přihlašování. Celý systém je založen na HTTP autentizaci. Když přijdeš na stránku, která je takto zabezpečená, tak ještě než se vůbec načte a tebe vyskočí okno (to zajišťuje každý prohlížeč automaticky) kam napíšeš jméno a heslo. Tyto hodnoty pak odešle na server, kde už s nimi pracuje ten script z [#17]. V poli $users jsou pak přihlašovací jména a hesla jednotlivých uživatelů. Ten kód, co jsem napsal stačí vložit na začátek php souboru, který má být chráněn.

Případně se dá http autentizace řešit už servrem (myšleno apache, či nějaký jiný server). Tudíž v PHP se o to starat nemusíš a bezpečnost zajistí už ten server. U apache je to tyicky pomocí konfiguračních souborů .htaccess a .htpasswd. tomaserlich.cz/zaheslovani-stranek-pomoci-htpasswd
veredico
Profil
Díky za objasnění, už to naprosto chápu, jen bych se chtěl zeptat ještě na jednu drobnost.
Podívám-li se na stránku http://www.jakpsatweb.cz/heslo.html,
tak tam je možnost použití serverového zaheslování, tuto možnost jsem použil pro to vkládání těch blogů. Je možné, že by se nějakým způsobem ten script mohl třeba nějak "zapínat" při příchodu třeba toho nějakého toho robota?


<?php
  $heslo = $_POST["heslo"];
  if ($heslo == "*****")
    echo "<h3 style=\"color:green\">Vše je OK, nyní můžeš napsat příspěvek :-)</h3><form action=\"blogdatabaze.php\" method=\"POST\" style=\" background-color:#fff; text-align:center\"> 
        
          <span>Datum</span>   
          <input type=\"text\" name=\"datum\" placeholder=\"datum\" id=\"datum\" required value=\"\" style=\" text-align: center; height:100%; width:100%\" >
          <br>
          <span>Text postu (mohou se používat TAGY na úpravu textu)</span>   
          <textarea name=\"text\" placeholder=\"text\" id=\"text\" required value=\"\" style=\" text-align: center; height:200px; width:100%\" ></textarea><br> 
<br>
      
          <input type=\"submit\" name=\"send\" class=\"button\" id=\"send\" value=\"Odeslat\" style=\"height:80%; width:80%\" >
        </form><hr><a href=\"email_dotazy.php\" class=\"button\">Dotazy</a>&nbsp;|&nbsp;<a href=\"zadosti_form.php\" class=\"button\">Vyplněné žádosti</a>&nbsp;|&nbsp;<a href=\"meta_des.php\" class=\"button\">Meta DESCRIPTION</a>";

  else
    echo "<h3 style=\"color:red\">HESLO NENÍ OK :-(</h3><br />
    <form action=\"blogpassword.php\" method=\"post\">
Zadej heslo pro vstup: <input type=\"password\" name=\"heslo\"><br /><br /> 
<input type=\"submit\" value=\"Odeslat heslo\"> 
</form> 
    ";
        ?> 
Keeehi
Profil
veredico:
Pokud myslíte tu část popsanou pod nadpisem "Serverová autentifikace" tak tom případě není možné, aby nějaký robot zapínal ten script. Tedy samozřejmě jen v případě, že nezná jméno a heslo :)

EDIT:
Tak jak vidím, měl jste na mysli "Zaheslování serverovým skriptem". Pokud se to udělá správně, tak zase bez znalosti hesla je robot v koncích, ale je tu mnohem větší prostor pro to udělat chybu.
veredico
Profil
Rozumím a omluvte mě za nepřesnou terminologii.

Jak je tedy možné, že se mi v souboru "blogpdatabaze.php" tvoří ten nový zápis, když k němu "teoreticky?" nevede žádná cesta, kromě tohoto serverového scriptu?

Jak jsem se dočetl na tomaserlich.cz/zaheslovani-stranek-pomoci-htpasswd, tak bych "asi" tedy měl nastavit do .htaccess toto "pravidlo?" Options -Indexes? Tím bych tomu měl zamezit?

Popřípadě, mám tu možnost vkládání článků vložit přímo do toho scriptu, který určuje to heslo?

Díky za odpověď.


Ještě se zeptám na jednu věc.

Předem si myslím že se to asi musí dělat přes sesion ID, ale to momentálně vůbec neumím.

Mám-li adressu http://www.***.cz/***/blogdatabaze.php tento soubor neni pod zadnym tim serverovym scriptem zabezpecen, ale cesta k nemu vede prave pres ***/blogpassword.php muho nejak sikovne nastavit to, aby se mi zobrazilo heslo v pripade ze zadam primou cestu k blogdatabaze.php, a vpripade zadani hesla v souboru blogpasswor.php se mi zadost o heslo nezobrazila v blogdatabaze.php?

Ještě jednou děkuji za Vaše odpovědi.
Keeehi
Profil
veredico:
Jsou 3 možnosti a musíte se rozhodnout pro jednu z nich.
1) Budete řešit zabezpečení sám v php scriptu pomocí přihlášení skrz formuláře
2) Použijete HTTP autentizaci za využití kontroly na straně apache
3) HTTP autentizace jež je řízena PHP scriptem

Bezpečné jsou všechny, pokud se implementují správně. Nejjednodušší a nejméně náchylná na chyby je možnost 2. Vyplívá to z toho, že se vám o bezpečnost stará jiná vrstva než ta, ve které pracujete. Takže se nemže stát, že byste nějakou podmínuku zapomněli ošetřit nebo jste si to prostě nějak rozbili.

Pokud stále chcete zůstat u možnosti jedna, budu pro kontrolu bezpečnosti potřebovat vidět celý obsah všech relevantních souborů. Zdá se mi, že máte všechno v souboru blogdatabaze.php ale možná to tak není. Pokud těch souborů je více, nezapomeňte na uvedení jejich jmen.
veredico
Profil
Tak jsem si to nechal přes oběd projít hlavou...
Řekl bych že možnost číslo 1, je nerozum a dost nepraktická volba, která se dá použít jen pro některé případy.

Možnost, která se zdá být tedy pro mě přitalená je možnost číslo 2,
Jen tedy nevím, jak určím soubory které mají být veřejné a které pro interní použití, v tomto případě se, předpokládám, požívá nějaké ID, které je v souboru.

Díky za objasnění, přeci jen tento milník je pro mou budoucí práci nezbytný.
Keeehi
Profil
veredico:
Řekl bych že možnost číslo 1, je nerozum a dost nepraktická volba, která se dá použít jen pro některé případy.
Ona praktická je a používá se dost často, prakticky téměř pořád. Vyžaduje však určitou úroveň zkušeností aby se vytvořila správně.

Jen tedy nevím, jak určím soubory které mají být veřejné a které pro interní použití, v tomto případě se, předpokládám, požívá nějaké ID, které je v souboru.
Dělá se to na základě adresářové struktury. Ten adresář, který chcete mít takto chráněn, bude obsahovat soubor .htaccess s příslušnou konfigurací.
veredico
Profil
Keeehi:
Moc Vám děkuji za objasnění, jdu to aplikovat a uvidím jak se mi to podaří.

Mohu Vás požádat jestli máte možnost nějakého zdroje, kde bych se "polopatě" dozvěděl jak funguje to session ID?

Něco málo jsem na internetu nalezl, ale toto je pro mě nové, tak sháním informace, kde se dá. :)

Jinak, jestli se zde dají někde dávat bludišťáky, tak mi dejte vědět kde, dám Vám plný počet.
veredico
Profil
veredico:
Moc dekuji, vse funguje, doufam ze to vyresi ten problem s tou teckou.

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: