Защита на входящи данни - нещо бъркам

misho

Registered
В началото на страницата, още преди html кода вземам променливите и им слагам наклонени черти, елиминирам таговете и т.н.:
Код:
$title = $_POST['title'];
$title = htmlspecialchars($title);
$title = addslashes($title);
След това идва частта, където правя проверка дали всичко е наред и въвеждам данните в БД:
Код:
if(isset($_POST['add']))
	{
         ....
         }
И след това идва html кода и самата форма за попълване. Когато сложа един апостроф (единична кавичка) и натисна бутона Добави, всичко е наред и виждам, че се появява наклонена черта, но това явно става след вписването в БД, защото там няма наклонена черта. :shock:
 
Така като за начало ще ти кажа кое за какво доло горе служи и кога да го ползваш да речем ще ползваш htmlspecialchars доло горе навсякаде в такива линкове .. може да има изключения ако имаш някакво по спецялно предназначение но иначе трябва да се ползва, така ако някой ваведе html код в GET то само ще се изведе кода, няма да се изпълни .. ако очакваш да ти се върне променлива с числова стойност трябва да ползваш int, is_numeric и abs, abs служи за превръщане на отрицателни числа в положителни, често в SQLi (СЯЛ ИНЖЕКЦИЯ) се използват отрицателни числа за заявката, но както виждам ти не очакваш числова стойност затова всичко може да стане така
Код:
$title=htmlspecialchars(addslashes(trim($_POST['title'])));

trim премахва празните места .. след това една проверка да речем дали изобщо е взето $title тоест :

Код:
if (!$title)
{
echo "Несте избрали заглавие.. или там каквото е !";
}
else
{
//Кода ако всичко е добре 
}

Общо взето това те спасява в 99% от случаите .. тези, които могат да заобиколят тази защита няма да се занимават с твоя сайт .. :)
 
trim не ми трябва в случай, защото това е заглавието на една обява и не искам да махам празните места. А за променливите като id или нещо друго, което използвам за mysql заявки ползва следното:
Код:
$category = $_POST['category'];
if (!empty($category)) {$category = (int)$category;}
Така оставям само числата.

Но въпроса ми беше друг. Защо при посочената по-горе структура на кода, в БД данните се записват в оригиналния си вид, незасегнати от htmlspecialchars и addslashes?
 
misho каза:
trim не ми трябва в случай, защото това е заглавието на една обява и не искам да махам празните места. А за променливите като id или нещо друго, което използвам за mysql заявки ползва следното:
Код:
$category = $_POST['category'];
if (!empty($category)) {$category = (int)$category;}
Така оставям само числата.

Но въпроса ми беше друг. Защо при посочената по-горе структура на кода, в БД данните се записват в оригиналния си вид, незасегнати от htmlspecialchars и addslashes?

ако ги гледаш през phpmyadmin те са stripslash-нати
 
lortnoc каза:
misho каза:
trim не ми трябва в случай, защото това е заглавието на една обява и не искам да махам празните места. А за променливите като id или нещо друго, което използвам за mysql заявки ползва следното:
Код:
$category = $_POST['category'];
if (!empty($category)) {$category = (int)$category;}
Така оставям само числата.

Но въпроса ми беше друг. Защо при посочената по-горе структура на кода, в БД данните се записват в оригиналния си вид, незасегнати от htmlspecialchars и addslashes?

ако ги гледаш през phpmyadmin те са stripslash-нати
Т.е. след като минат през заявката им се махат наклонените черти и едва тогава се записва в БД ли? Защото след като попълня формата и изпратя данните в полето виждам, че има наклонена черта, а в phpmyadmin я няма. :? Всъщност, ако е така пак съм защитен, нали?
 
така ако ги няма в db-to занчи си е защитено реално ти махаш наклонените чарти и след това за да ги изведеш както трябва с наколконеи черти се ползва stripcslashes за извеждане :)
 

Back
Горе