Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

11.12.2007, 14:31
|
|
Banned
Регистрация: 27.06.2006
Сообщений: 1,614
Провел на форуме: 3887520
Репутация:
2996
|
|
фильтры работающие таким образом несовершенны смотри защиту sweb
|
|
|

11.12.2007, 15:03
|
|
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме: 1106266
Репутация:
366
|
|
PHP код:
function sql_query(){
unset($this->result);
$args = func_get_args();
$tmpl =& $args[0];
$tmpl = str_replace("%", "%%", $tmpl);
$tmpl = str_replace("?", "%s", $tmpl);
foreach ($args as $i=>$v){
if (!$i) continue; // это шаблон
if (is_int($v)) continue; // целые числа не нужно экранировать
$args[$i] = "'".mysql_real_escape_string($v)."'";
}
$args[count($args)] = 'UNKNOWN_PLACEHOLDER';
$query=call_user_func_array("sprintf", $args);
$this->result=@mysql_query($query) or die(mysql_error());
return $this->result;
}
вот метод класса обёртка, приемущество в том, что нет возможности забыть провести проверку входных данных.
|
|
|

11.12.2007, 17:30
|
|
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме: 1106266
Репутация:
366
|
|
[ cash ]мож я туплю (только сейчас просмотрел код (: ) , непонял назначение т.е. каждый запрос прогоняем и смотрим визуально правильно написали или нет?(хотя подсветка мне понравилась + )
по коду, думаю надо регулярки с модификатором /i
и в [\d0-9]+ помойму что то одно лишнее.
|
|
|

11.12.2007, 18:50
|
|
Постоянный
Регистрация: 20.01.2006
Сообщений: 302
Провел на форуме: 3536885
Репутация:
447
|
|
вот собственно по сабжу, сам батька nerezus писал)))))
http://forum.antichat.ru/thread30641.html
|
|
|

11.12.2007, 19:15
|
|
Banned
Регистрация: 22.08.2006
Сообщений: 608
Провел на форуме: 6144796
Репутация:
1095
|
|
Сообщение от [ cash ]
Можно легко обезапасить любю cms поставив грамотную фильтрацию, так что если вы не уверненны в своем движке или в чужом просто просто проводите все запросы через эту функцию.
PHP код:
<?
error_reporting(0);
function HLSQL($Query)
{
$Query=preg_replace("/(\s{1})(JOIN)/", "\\1\nJOIN", $Query);
$Query=preg_replace("/([^a-zA-Z]{1})([\d0-9]+)/", "\\1<span style=\"color:6666CC\">\\2</span>", $Query);
$Query=preg_replace("/('[^']+')/", "<span style=\"color:FF9900\">\\1</span>", $Query);
$Query=preg_replace("/(#.*\n)/", "<span style=\"color:999999\">\\1</span>", $Query);
$Query=preg_replace("/FROM[\s+](\S+)\s/", "FROM <span style=\"color:339900;text-decoration:underline\">\\1</span> ", $Query);
$Query=preg_replace("/JOIN[\s+](\S+)\s/", "JOIN <span style=\"color:339900;text-decoration:underline\">\\1</span> ", $Query);
$Query=preg_replace("/(COUNT|SUM)\(([^\)]+)\)/", "<span style=\"color:FF0000;font-weight:bold\">\\1</span>(\\2)", $Query);
$Query=preg_replace("/\s{1}(FROM|JOIN|GROUP|WHERE|ORDER|LIMIT|AND|ON)\s{1}/", " <span style=\"color:0000FF;font-weight:bold;\">\\1</span> ", $Query);
$Query=preg_replace("/\s{1}(BY|OR|AS|IN|BETWEEN)\s{1}/", " <span style=\"color:000000;font-weight:bold;\">\\1</span> ", $Query);
$Query=preg_replace("/(SELECT)/", " <span style=\"color:0000FF;font-weight:bold;\">\\1</span> ", $Query);
$Query=preg_replace("/\(/", "<span style=\"font-weight:bold;\">(</span>", $Query);
$Query=preg_replace("/\)/", "<span style=\"font-weight:bold;\">)</span>", $Query);
return "<p style=\"color:000000; font-size:12px;\">".nl2br($Query)."</p>";
}
?>
>> Можно легко обезапасить любю cms поставив грамотную фильтрацию
с каких это пор функции для подсветки синтаксиса кода стали "грамотной фильтрацией" ? +))
>> просто проводите все запросы через эту функцию.
ога, я бы посмотрел на такую cms.. +)
Последний раз редактировалось Digimortal; 11.12.2007 в 19:19..
|
|
|

11.12.2007, 23:38
|
|
Познающий
Регистрация: 09.09.2007
Сообщений: 66
Провел на форуме: 188412
Репутация:
41
|
|
А если в каждый скрипт (или в тот, который вызывается в каждом):
PHP код:
foreach ($_GET as $check_url) {
if (!preg_match("/[a-zA-Z0-9]/",$check_url)) {
die ("access forbidden");
}
}
unset($check_url);
Это только для Get, для постов надо настроить по своему регулярное выражение...
Последний раз редактировалось Meanor; 11.12.2007 в 23:41..
|
|
|

12.12.2007, 15:50
|
|
Новичок
Регистрация: 12.07.2007
Сообщений: 13
Провел на форуме: 76147
Репутация:
32
|
|
2 Enot and Meanor, use $_REQUEST.
$query = $_POST['query']; -> $query = $_REQUEST['query'];
....
foreach ($_REQUEST as $check_url)
....
куки, пост, гет, файл - все в одной куче
PS. хотя..... я права насчет REQUEST или как?
|
|
|

12.12.2007, 18:44
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
2 Enot and Meanor, use $_REQUEST.
$query = $_POST['query']; -> $query = $_REQUEST['query'];
....
foreach ($_REQUEST as $check_url)
....
куки, пост, гет, файл - все в одной куче
Ну это личное дело каждого. Лично я предпочитаю какой метод использую, такой и указываю,мне так проще)
PS. хотя..... я права насчет REQUEST или как?
Насчёт $_REQUEST при использовании POST и GET да.
К кукам это совсем не относится, там HTTP_COOKIE_VARS масть держит))
|
|
|

13.12.2007, 05:06
|
|
Участник форума
Регистрация: 31.12.2005
Сообщений: 231
Провел на форуме: 1106266
Репутация:
366
|
|
.:EnoT:. ты отстал от жизни теперь уже $_COOKIE
php.net
Переменные, передаваемые скрипту через HTTP cookies. Аналог старого массива $HTTP_COOKIE_VARS (который по-прежнему доступен, но не рекомендуется).
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|