PDA

Просмотр полной версии : Прием с $_get


dimash
21.08.2008, 22:07
<?php
$id_mail = (isset($_GET['id_mail'])) ? string($_GET['id_mail']) : null;
echo($id_mail);
?>

<Fatal error: Call to undefined function string() in Z:\home\priceie\www\getie.php on line 2

wtf?

Vid0k
21.08.2008, 22:12
он не вдупляет что за ф-ия string

.Slip
21.08.2008, 22:12
Что ты хочешь сделать с этой строкой?

eLWAux
21.08.2008, 22:15
пробуй так:
<?php
$id_mail = (isset($_GET['id_mail'])) ? ($_GET['id_mail']) : null;
echo($id_mail);
?>

у меня все ОК! =)

тоесть:
если есть GET передача параметра id_mail, то значение присваеваетса)) $id_mail, а если нет такого параметра, то $id_mail присв. нул)) а дальше виводитса $id_mail. вот и все.
при запросе ?id_mail=123 ви ведетса текст 123

eLWAux
21.08.2008, 22:16
"Call to undefined function string()"
визов неизвестной функции string()
тоесть в php функции string() нету))))

GreenBear
21.08.2008, 22:51
(string) $_GET['id_mail']

eLWAux
21.08.2008, 22:58
dimash, ето ведь пример..
или тебе надо чтоб здесь написали код, в котором идет проверка на ковички и т.д..

ладно, special for you(супер мега проверка):


function n($msg)
{
$msg = substr($msg,0,1024);//обрезаем 1024сиволов))
$msg = htmlspecialchars($msg);//quot
return $msg;//возв знак
}

возвращает провереную строчку)))

NOmeR1
21.08.2008, 23:01
Тема - бред. Get параметры всегда в формате string, а если его нет, то NULL.
eLWAux, мда )))
<?php echo htmlspecialchars($_GET['id_mail']); ?>

eLWAux
21.08.2008, 23:03
function n($msg)
{ $msg = substr($msg,0,1024);
$msg = htmlspecialchars($msg);
return $msg;
}

<?php echo n($_GET['id_mail']); ?>


и никакой хакер не достучитса))

scrat
21.08.2008, 23:32
function n($msg)
{ $msg = substr($msg,0,1024);
$msg = htmlspecialchars($msg);
return $msg;
}

<?php echo n($_GET['id_mail']); ?>


и никакой хакер не достучитса))
если у тебя id_main - число то не проще ли inval()-ом пользоваться?

GreenBear
21.08.2008, 23:37
Тема - бред. Get параметры всегда в формате string, а если его нет, то NULL.
eLWAux, мда )))
<?php echo htmlspecialchars($_GET['id_mail']); ?>
?id_mail[]=lol

.:EnoT:.
22.08.2008, 00:24
$id = !empty($_GET['id_mail']) && is_numeric($_GET['id_mail']) ? intval($_GET['id_mail']) : '';
echo htmlspecialchars($id);
))

GreenBear
22.08.2008, 01:09
.:EnoT:., кажется на баше была цитата

if($var == true){
//проверим для надежности..
if($var == false){exit;
}
}

это не с тебя брали?

Isis
22.08.2008, 03:44
eLWAux, мда)
.:EnoT:., прочитай статью "Роковые ошибки PHP" не помню какую часть.. про is_numeric

BlackSun
22.08.2008, 03:48
eLWAux, мда)
.:EnoT:., прочитай статью "Роковые ошибки PHP" не помню какую часть.. про is_numeric
C is_numeric как раз все впорядке)


[ intval(), (int) ]

У intval() есть интересная особенность - она возвращает TRUE если первой в аргументе содержится хотя бы одна цифра.
И у разработчиков тоже есть интересная особенность =)) -- они периодически используют intval()/(int) в логичесих условиях,
допуская непростительные ошибки.
Ведь наличие цифр в строке вовсе не гарантирует отсутствие других символов.

Пример:

/index.php?id=1'"qwerty
PHP код:
$id=$_GET['id'];
if(intval($id) && (int)$id)
{
sql_query("select $id from table_name");
}
else die('Id not integer!');


Несмотря на кажущуюся незначительность баги, встречается она в диком тырнете достаточно регулярно.
Для безопасного сравнения используйте is_numeric()

nerezus
22.08.2008, 11:21
.:EnoT:., прочитай статью "Роковые ошибки PHP" не помню какую часть.. про is_numeric Все у него правильно ;) хотя можно было без условий только intval применить. Точнее нужно ;)

.:EnoT:.
22.08.2008, 11:46
GreenBear, оч смешно...обоснуй лучше к чему ты это написал?

Isis, в чём же эта "роковая ошибка PHP?" :)
http://www.xakep.ru/magazine/xa/110/068/1.asp вот статья. Вот цитата оттуда:
К счастью, для безопасного сравнения можно (и нужно!) использовать is_numeric().
В моём примере ничего уязвимого не вижу...id_mail проверяется, является ли он числом, если да, то берётся его целое числовое значение....или ты собрался sql-иньекцию проводить через это?)) И запрос вида ?id_mail[]=123 ошибку не выдаст, он просто не будет обработан.
Правда не знаю чё я туда htmlsprcialchars() запихнул, если там числовой параметр...ну пофиг

GreenBear
22.08.2008, 12:34
да так...

Demonyx
22.08.2008, 13:12
А так если писать?

<?php

if( (strval(intval($_GET['id_mail'])) == $_GET['mail']){
//ОК!
}else{
//Лог & Бан)
}
?>

Isis
22.08.2008, 13:52
Я Славик (с)

NOmeR1
22.08.2008, 14:48
Я Славик (с)
Ща модно флудить что ли стало?

Hexadecimal notation (0xFF) is allowed too but only without sign, decimal and exponential part.
<?php
if(is_numeric('0xABCDEF')) {
echo 'wtf?? "0xABCDEF" - is it number??';
}
?>