09.06.2011, 02:11
|
Кандидат Javascript-наук
|
|
Регистрация: 05.09.2010
Сообщений: 103
|
|
Спорность в том "что нужно меньше знать, и это проще". Спорно потому, что это основывается на субъективном опыте. Кому-то проще, кому-то - наоборот.
|
|
10.06.2011, 11:29
|
Человек
|
|
Регистрация: 10.03.2011
Сообщений: 305
|
|
x-yuri,
Invis1ble,
evgh,
Следил за Вашими прениями, но в действительности предложеного мной варианта должно быть достаточно) Кстати может есть рекомендации по хорошему ресурсу о безопасности?
__________________
XYZ
|
|
10.06.2011, 12:45
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Invis1ble
|
Спорность в том "что нужно меньше знать, и это проще". Спорно потому, что это основывается на субъективном опыте. Кому-то проще, кому-то - наоборот.
|
Мой субъективный опыт подсказывает, что человек не может удерживать в голове слишком много информации. Поэтому ему свойственно прятать детали, обращаясь к ним по мере необходимости. Так появились функции, классы, объекты, предложения, абзацы, главы и модель OSI. А о каком субъективном опыте говоришь ты?
Сообщение от 0931454574
|
но в действительности предложеного мной варианта должно быть достаточно)
|
...пока значения находятся в пределах php-типа int
|
|
10.06.2011, 23:08
|
Кандидат Javascript-наук
|
|
Регистрация: 05.09.2010
Сообщений: 103
|
|
x-yuri,
Я говорю о том, что когда я вижу некий метод мне нужно либо уже знать его, либо лезть в кишки и узнавать, либо штудировать мануалы. Вы ведь не используете вслепую чьи-то наработки? И так как фреймворков и библиотек великое множество - то такое упрятывание деталей мне не то что не помагает, а наоборот мешает. Вместо того чтобы знать одну единственную функцию mysql_real_escape_string() и быть счастливым.
ПС. Вот приходит мне щас письмо на почту по подписке на одном ресурсе: [PHP Classes] Added a new class: Basic SQL Injection Protection
И спрашивается, нафига мне их класс? По сути, ради одной функции?
Вы скажете, нет, там с помощью него можно еще корованы грабить! Предположим, это очень полезная для меня функция и я всегда мечтал это сделать, но чтобы убедиться в том, что этот класс действительно умеет грабить корованы, а не какую-то бяку - мне все равно надо лезть в кишки и изучать
Хорошо, что в письме сразу идет описание:
Цитата:
|
Detailed description:This class can cleanup harmful text from request parameters.
It can check a given parameter value of $_GET, $_POST or $_REQUEST super-global variables and remove certain types of text values that are usually used to perform SQL injection attacks.
|
Какое счастье!!! Вместо того, чтобы экранировать кавычки и т.п. он это все удаляет! =)
В топку такой класс....
ППС.
Сообщение от x-yuri
|
человек не может удерживать в голове слишком много информации.
|
И где в итоге приходится больше помнить? Помнить одну функцию mysql_real_escape_string() или помня код (или по крайней мере названия) 100500 методов из различных чудо-библиотек, чтобы уверенно ориентироваться в чужом коде?
Довольно сумбурно выразился, но надеюсь моя основная мысль ясна.
Последний раз редактировалось Invis1ble, 10.06.2011 в 23:49.
|
|
11.06.2011, 00:19
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от Invis1ble
|
mysql_real_escape_string()
|
дак её одной мало для защиты от инъекций ....
|
|
11.06.2011, 00:30
|
Кандидат Javascript-наук
|
|
Регистрация: 05.09.2010
Сообщений: 103
|
|
ну приведение к типам еще, в корне ситуация все равно не меняется. Или я чего-то не знаю oO ?
|
|
12.06.2011, 17:30
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Invis1ble
|
Я говорю о том, что когда я вижу некий метод мне нужно либо уже знать его, либо лезть в кишки и узнавать, либо штудировать мануалы. Вы ведь не используете вслепую чьи-то наработки?
|
...либо понять как он работает по названию, сигнатуре, по аналогии с другим методом/фреймворком, из примера
Сообщение от Invis1ble
|
И так как фреймворков и библиотек великое множество - то такое упрятывание деталей мне не то что не помагает, а наоборот мешает. Вместо того чтобы знать одну единственную функцию mysql_real_escape_string() и быть счастливым.
|
и так как фреймворков и библиотек великое множество, приходится выбирать. А так как хороших вариантов не так много, то и выбор не так сложен
кроме того, если фреймворк скорее мешает, чем помогает, значит он, как минимум тебе не подходит. Возможно, это просто плохой фреймворк. Возможно, для твоей задачи не нужен фреймворк. Но, возможно, дело в тебе
потом, для простых задач можно обойтись без фреймворков. Но для достаточно сложных без них не обойтись. (ты же не будешь утверждать, что надо все писать на ассемблере?) И выхода два - либо воспользоваться существующим фреймворком, либо изобрести свой. Если ты в состоянии реализовать второй вариант - хорошо. Если не в состоянии, но ты это сделал - это хуже, чем первый вариант.
Сообщение от Invis1ble
|
И где в итоге приходится больше помнить? Помнить одну функцию mysql_real_escape_string() или помня код (или по крайней мере названия) 100500 методов из различных чудо-библиотек, чтобы уверенно ориентироваться в чужом коде?
|
помнить как использовать проще, чем помнить как написать с нуля. Но я не говорил "помнить". Я говорил "удерживать в голове". Это означает, что нельзя написать что-то достаточно сложное, не используя функции, методы, классы. Создавая функцию, ты прячешь ее реализацию за ее именем. Если нужно постоянно смотреть в реализацию, возможно, ты неудачно определился с обязанностями функции, ее именем или еще чем-нибудь. В общем, не удалась функция. Ты ведь используешь функции?
хотя я так понял, дело именно в чужом коде. Может тебе приходилось слишком много заниматься поддержкой кода, написанного на каком-нибудь неоправданно сложном для задачи фреймворке?
а в случае с экранированием разница действительно незначительна. Но ведь если расширение
Последний раз редактировалось x-yuri, 12.06.2011 в 17:32.
|
|
13.06.2011, 19:05
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Invis1ble,
Я тебе приведу пример, а ты уж дальше сам скажи что использовать приятней и легче и ... ну в общем думаю будет понятно.
Выборка всех полей из таблицы в json с применением PDO:
$r = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($r);
и теперь без:
$arr = array();
$s = mysql_query($sql);
while($r = mysql_fetch_assoc($s)){
$arr[] = '{ "id": "'.$r['id'].'", "title": "'.$r['title'].'", "content":"'.$r['content'].'"}';
} //здесь опущено экранирование переносов строк в content и title
echo '['.implode(",",$arr).']';
или вот так:
function mysql2json($mysql_result,$name) {
$result = array($name => array());
while ($row = mysql_fetch_assoc($mysql_result))
$result[$name][] = $row;
return json_encode($result);
}
или вот так:
function mysql2json($mysql_result,$name){
$json="{\n\"$name\": [\n";
$field_names = array();
$fields = mysql_num_fields($mysql_result);
for($x=0;$x<$fields;$x++){
$field_name = mysql_fetch_field($mysql_result, $x);
if($field_name){
$field_names[$x]=$field_name->name;
}
}
$rows = mysql_num_rows($mysql_result);
for($x=0;$x<$rows;$x++){
$row = mysql_fetch_array($mysql_result);
$json.="{\n";
for($y=0;$y<count($field_names);$y++) {
$json.="\"$field_names[$y]\" : \"$row[$y]\"";
if($y==count($field_names)-1){
$json.="\n";
}
else{
$json.=",\n";
}
}
if($x==$rows-1){
$json.="\n}\n";
}
else{
$json.="\n},\n";
}
}
$json.="]\n};";
return($json);
}
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
14.06.2011, 19:03
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
вообще-то это не честный пример. Должно быть как-то так:
$r = mysql_query($sql);
$rows = array();
while ($row = mysql_fetch_assoc($r))
$rows[] = $row;
echo json_encode($rows);
|
|
14.06.2011, 19:43
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от x-yuri
|
вообще-то это не честный пример. Должно быть как-то так:
$r = mysql_query($sql);
$rows = array();
while ($row = mysql_fetch_assoc($r))
$rows[] = $row;
echo json_encode($rows);
|
согласен, но ведь и json_encode() не всегда было, ведь если не учить ничего нового, так и json_encode вроде не нужно.
а выровнять в одну строку? и я против опускания {}
echo json_encode($pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC));
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Последний раз редактировалось Gozar, 14.06.2011 в 19:46.
|
|
|
|