[Другое] Цитатник от jon4god (lsass.exe)

Ничего себе новость! :( Сажусь и пытаюсь разобраться с безопасностью. Думаю к концу недели постараюсь залатать дыры. Если у кого еще какие проблемы пишите, чтобы решить их оперативно. Слоган недели - Сделаем цитатник безопасным! :)
 
Если поможет, мы тут несколько месяцев назад обсуждали в частности безопасность данных в форме и проверке обработчиком Для просмотра ссылки Войди или Зарегистрируйся - там на третьей страничке рамзес несколько проверок предложил. Я их у себя на другом проекте поставила. Но у меня было все просто - классически файл формы + файл обработчика, где проверялась форма. А в цитатнике все через... короче, все не очень понятно реализовано - проверки раскиданы не в обработчиках, а через функции в func.php, и я там просто не соображу, как их прикрутить к формам. Если сможешь это соединить - будет хорошо=)
 
Жалко эксплоит.ин больше запросы не принимает - я бы ради этого отдал свой цитатник на растерзание.
P.S над безопасностью надо бы подумать!
 
Если поможет, мы тут несколько месяцев назад обсуждали в частности безопасность данных в форме и проверке обработчиком Для просмотра ссылки Войди или Зарегистрируйся - там на третьей страничке рамзес несколько проверок предложил. Я их у себя на другом проекте поставила. Но у меня было все просто - классически файл формы + файл обработчика, где проверялась форма. А в цитатнике все через... короче, все не очень понятно реализовано - проверки раскиданы не в обработчиках, а через функции в func.php, и я там просто не соображу, как их прикрутить к формам. Если сможешь это соединить - будет хорошо=)
Есть валидация формы через validationengine.js (т.е. JS) или я не пойму тогда о чем речь? О какой безопасности ты говоришь?
P.S. Времени нет поковыряться. Думаю по крайней мере вставлю в админку бекап базы, чтобы можно было одним касанием сливать дамп.
 
Есть валидация формы через validationengine.js (т.е. JS) или я не пойму тогда о чем речь?
Я правильно понял, что ты валидируешь форму только на стороне клиента (JS)?
 
Я правильно понял, что ты валидируешь форму только на стороне клиента (JS)?
Ага. А как на стороне сервера это сделать? Ткните "постом". :)
Сделал бекап базы из админки, пока до ума безопасность доведем думаю актуально.
В func.php добавляем функцию:
PHP:
function backup_database_tables($host,$user,$pass,$name,$tables)
{
        $link = mysql_connect($host,$user,$pass);
        mysql_select_db($name,$link);
        //get all of the tables
        if($tables == '*')
        {
                $tables = array();
                $result = mysql_query('SHOW TABLES');
                while($row = mysql_fetch_row($result))
                {
                        $tables[] = $row[0];
                }
        }
        else
        {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
        }
        foreach($tables as $table)
        {
                $result = mysql_query('SELECT * FROM '.$table);
                $num_fields = mysql_num_fields($result);
                $return.= 'DROP TABLE '.$table.';';
                $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
                $return.= "\n\n".$row2[1].";\n\n";
                for ($i = 0; $i < $num_fields; $i++)
                {
                        while($row = mysql_fetch_row($result))
                        {
                                $return.= 'INSERT INTO '.$table.' VALUES(';
                                for($j=0; $j<$num_fields; $j++)
                                {
                                        $row[$j] = addslashes($row[$j]);
                                        $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                                        if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                                        if ($j<($num_fields-1)) { $return.= ','; }
                                }
                                $return.= ");\n";
                        }
                }
                $return.="\n\n\n";
        }
        $handle = fopen('db-backup-'.$_SERVER['SERVER_NAME'].'.sql','w+');
        fwrite($handle,$return);
        fclose($handle);
}
В админке создаем файл backup.php с таким содержанием:
PHP:
<?
if(!defined('check')) die("Hello, world!!!");
require_once "../config.php";
require_once "../func.php";
backup_database_tables('$dbhost','$dbuser','$dbpass','$dbname', '*');
echo 'Бекап базы успешно осуществлен.';
?>
В index.php который в админке добавляем:
PHP:
<a href=index.php?page=backup>Бекап базы</a><br>
после
PHP:
<a href=index.php?page=sitemap>Генерация Sitemap</a><br>
например.
 
jon4god, имхо, проверять через яву и у клиента смысла нет - кулхацкеры яву отключают и долбят через поддельные формы сразу прямо сервер=/ Нужно проверять в обработчике, пхп, и на стороне сервера.
Я себе сейчас бэкап БД через крон подключила на каждые 6 часов автоматом, так как в админку реже захожу.

Еще кто-то выше спрашивал про проблему с кнопками соц.сетей, что они видны только на первой странице, а на остальных их нет. Сейчас дошли руки посмотреть - такая ерунда происходит из-за того, что изначальная ссылка хттп//сайт.ру на других страницах видоизменяется на хттп//сайт.ру/page/2.. и кнопка ищется не по исходному адресу сайт/share/ а по адрему сайт/page/share. Лезть в код ради этой фигни лень, так что самое простое решение: просто создать на хосте дополнительную папку page и скопировать туда папку share с кнопками.
 
Идею понял. Буду думать.
А с кнопками проблемы могут быть если путь к ним прописан иначе, чем "../images/facebook.png" к примеру. Путь должен быть прописан правильно. Иначе картинка ищется относительно текущего адреса.
 
Чет тема потухла...
Вообщем раскапываем полезные фишки хттаксесса.
Вообщем есть у меня такая фишечка... как говорится - (зарываем некоторые возможные эксплойты).
Изменяем под себя - в .htaccess


Блокируем всякие беспонтовые юзерагенты - поисковики


Прочие полезности - фильтруют рвзную хренотень
 
Спасибо Revenge-R за повышение безопасности цитатника. Просто реально некогда цитатником заниматься, так как с проблемами безопасности пока не сталкиваюсь сильно, а дел гора и холмик.
Зато появились некоторые плюшки.
Вот например код виджета цитатника для Яндекса:
PHP:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:widget="http://wdgt.yandex.ru/ns/"  >
  <head>
      <meta name="title" content="Здесь название виджета" />
      <meta name="description" content="Здесь описание виджета." />
      <meta name="titleURL" content="http://сайт.ru" />
    <script type="text/javascript" src="http://img.yandex.net/webwidgets/1/WidgetApi.js"></script>
	<script type="text/javascript">
	widget.onload=function(){widget.adjustIFrameHeight();}
	</script>
  </head>
  <body style="margin:0;font:normal 11px 'Verdana'">
    <script language="JavaScript" type="text/javascript" src="http://сайт.ru/forweb"></script><br/>
	<input type="button" onclick="widget.reload();" value="Другой афоризм">
  </body>
</html>
Расширение виджета xhtml
 
Назад
Сверху