Follow along with the video below to see how to install our site as a web app on your home screen.
Бележка: This feature may not be available in some browsers.
cr0uch3rr каза:Вместо display none на първото echo можеш и да го оставиш празно , но според мен няма "по-елегантен" начин. Аз по същата логика ползвам тези SESSION-и
<?
function za6titi($tekst)
{
if ( (int)$tekst )
return $tekst;
else
{
$tekst = addslashes($tekst);
$tekst = htmlspecialchars($tekst, ENT_NOQUOTES);
return $tekst;
}
}
$_SESSION = @array_map("za6titi", $_SESSION);
$_COOKIE = @array_map("za6titi", $_COOKIE);
$_SERVER = @array_map("za6titi", $_SERVER);
?>
if ( (int)$tekst )
if(ctype_digit($text))
123<hacking></text>
Криене на бутон? Ако искаш да го скриеш, защо изобщо го показваш? Защо изобщо трябва да има "div display=none" в страницата?Това ли е правилния начин за криене на бутон на текущия ( логнатия ) потребител или има друг "по-елегантен" начин?
if(empty($_SESSION['id'])) {
echo '<div> Бутон </div>';
}
anonimen каза:Защото!
Отговорете си сами какво ще стане при този инпут:
Код:123<hacking></text>
$args = [
'username' => [
'filter' => FILTER_SANITIZE_STRING,
'options' => [ 'min_range' => 4, 'max_range' => 16]
],
'email' => FILTER_VALIDATE_EMAIL,
'password' => [
'filter' => FILTER_SANITIZE_STRING,
'options' => [ 'min_range' => 3, 'max_range' => 20 ]
]
];
$filter = filter_input_array(INPUT_POST, $args);
if ( is_array($filter) ) {
// всичко е точно и сетваме сесии
}
Revelation каза:anonimen каза:Защото!
Отговорете си сами какво ще стане при този инпут:
Код:123<hacking></text>
Ще върне 0, което е false. Конкретен отговор, на конкретен въпрос.
Друг е въпроса цялостната логика.
До автора. Преди да сетваш каквито и да е сесии, то се уверявай, че данните, които си получил са верни. Т.е., трябва да правиш проверките на по-горно ниво.
Аз бих ползвал filter_input_array().
Пример по примера в документацията.
Проста регистрация:
PHP:$args = [ 'username' => [ 'filter' => FILTER_SANITIZE_STRING, 'options' => [ 'min_range' => 4, 'max_range' => 16] ], 'email' => FILTER_VALIDATE_EMAIL, 'password' => [ 'filter' => FILTER_SANITIZE_STRING, 'options' => [ 'min_range' => 3, 'max_range' => 20 ] ] ]; $filter = filter_input_array(INPUT_POST, $args); if ( is_array($filter) ) { // всичко е точно и сетваме сесии }
ЕДИТ: След това не взимай стойностите директно от $_POST и да ги сетваш. Взимай ги от $filter масива.
$filter = [];
if ( ТУКА ПРОВЕРКА ЗА ВАЛИДНА ПОЩА ) {
$filter['email'] = $_POST['email'];
}
Не. Току що тествах. Връща 123, което е true.Revelation каза:anonimen каза:Защото!
Отговорете си сами какво ще стане при този инпут:
Код:123<hacking></text>
Ще върне 0, което е false. Конкретен отговор, на конкретен въпрос.
<?php
$da = "123<hack></text>";
echo ((int) $da);
Revelation каза:Не е точно така, както описваш случая, който съм дал. При моя случай променливата $filter съдържа само това, което е описано в масива. Т.е. няма как да не знаеш за една регистрация или вход как трябва да си филтрираш данните. Задаваш условия, изпълнява ги и ти връща масив с филтрираните данни. Ако подадеш директно глобалния масив, ти реално пускаш нефилтрираните данни.
Дори и да подаде други параметри филтъра ще ги отчете като null, а ако се зададе един от предоставените флагове(не помня точно как се пишеше), това което го няма описано в масива за филтриране го отчита и дава false.
Колкото за паметта — стига глупости де. Това не влияе с нищо, на всичкото отгоре данните се трият от паметта след като смениш страницата.
Това което прави филтър функцията е същото, което трябва да се прави и при ръчна проверка.
Отворете някоя книга за защита и ще видите следното.
PHP:$filter = []; if ( ТУКА ПРОВЕРКА ЗА ВАЛИДНА ПОЩА ) { $filter['email'] = $_POST['email']; }
function za6titi($tekst)
{
if ( (int)$tekst )
return $tekst;
else
{
$tekst = addslashes($tekst);
$tekst = htmlspecialchars($tekst, ENT_NOQUOTES);
return $tekst;
}
}
$_SESSION = @array_map("za6titi", $_SESSION);
$_COOKIE = @array_map("za6titi", $_COOKIE);
$_SERVER = @array_map("za6titi", $_SERVER);
$_POST = @array_map("za6titi", $_POST);