miketomlin

Рейтинг
235
Регистрация
04.12.2013

Mixalko, код крайне слабый, в том числе и в плане безопасности.

Вот это вообще шедевр:


$page = "contents/" . $_GET['id'] . ".php";
include $page;
if (file_exists ( $page = "contents/" . $_GET['id'] . ".php" ))

Судя по логике (да, я умудрился даже здесь рассмотреть задатки таковой), чтобы закрыть одинокий ?, нужно написать что-то подобное:


if ($_SERVER['REQUEST_URI']=='/?') {
echo '404';
$error="true";
}
elseif($_GET['id'] == "") {
Хотя конечно тут лучше действовать не от противного, а в лоб, т.е. проверять адрес на соответствие всем имеющимся у вас обработчикам, но а если такое соответствие не найдено, выдавать 404-ую ошибку.

ЧПУ могло быть сокрыто вот за этим кодом:


$page = "contents/".$contentname;
include $page;

Но к сожалению что такое $contentname, из приведенного кода непонятно. Рекомендую вам почитать эту мою статью: Как сделать единую точку входа с ЧПУ? Но а в целом вам крайне рекомендуется хотя бы что-то такое.

---------- Добавлено 23.08.2016 в 16:49 ----------

P.S. Дубли из-за GET-параметров – проблема многих сайтов. Сам Яша тоже этим страдает, хотя им походу это пофиг, лишь бы других подрючить:

yandex.ru/?

yandex.ru/?id

yandex.ru/?id=killme

---------- Добавлено 23.08.2016 в 16:53 ----------

Моя подружка в этом плане попродвинутей оказалась: gency.ru/? :D

С вопросительным. Насколько знаю, одинокий ? в .htaccess и т.п. отловить нельзя. Нужно копать глубже. На чем сайт?

livetv:
Я таких хостингов не встречал.
Да и в PHP5.4+ это работает независимо от настройки short_open_tag

Плюсую. Тоже хотел написать это замечание, но за разбором выше забыл.

---------- Добавлено 23.08.2016 в 01:56 ----------

miketomlin:

Может таблицы в БД разбивать. Но она у меня в БД одна до 200мб.

Вам срочно рекомендуется хотя бы что-то такое.
Кстати, один простецкий модуль и весь контент можно тянуть из файлов на диске, оставив в базе только индексную инфу. Можно добавить флаг «исполняемый», чтобы не возникало проблем со вставками вроде <?= $row['page'] ?> и любыми другими. У нас такое есть в одном сервисе. Вообще же в движке есть штатные средства для этого – шаблоны.
seovisor:

/*даем прямой доступ к физически существующим файлам*/
if($_SERVER['REQUEST_URI'] == '/robots.txt') {include('robots.txt'); die;}
if($_SERVER['REQUEST_URI'] == '/sitemap.xml') {include('sitemap.xml'); die;}

Птец. У вас же есть условие !-f. Статик лучше просто читать, а не исполнять: readfile().


if($u == '') $u = 'index.htm'; // запросили главную

В базе можно и пустой url, идентифицирующий главную, хранить.


$result = sqlite_unbuffered_query($db, 'SELECT * FROM sample'); //получаем данные из БД
b:
while ($row = sqlite_fetch_array($result)) { //ищем нужный нам урл
if ($row['url'] == $u) {echo $row['page'];goto a;} // когда находим нужный нам урл выводим содержисое страницы
}
$u = 'index.htm'; goto b; //если страница не найдена посылаем на главную (404 потом сделаю)

Это полный птец. Про первую команду уже сказали. Но тут еще синий цикл в случае проблемы с БД наклевывается.


На index.php отправляю все запросы в .htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]';

Не все. У вас условия есть. Второе, возможно, лишнее. QSA здесь без надобности.


У меня ведь поле url в БД уникальное.

UNIQUE?

Может таблицы в БД разбивать. Но она у меня в БД одна до 200мб.

Вам срочно рекомендуется хотя бы что-то такое.

Выше вам все сказали. Если сами не готовы, можно где-нибудь на стороне подключить редирект, например тут – вам понадобится только прислать/загрузить обновленные роботс и карту, все остальное подробно расскажут.

---------- Добавлено 20.08.2016 в 17:00 ----------

Если целевой домен «голый», то о каком сохранении позиций может идти речь?

Comopt:
нашел исходник шаблона, там был вариант из двух блоков, там и поглядел )))

Что я тоже советовал. Это почти всегда самый простой способ. Пакет с оригинальным шаблоном не выкидывайте. Наверняка, еще не раз вам поможет.

seovisor:
У хостера ограничения на количество файлов, поэтому использую только 10% диска.
За объем MySQL хочет денег.
Вот думаю как сделать БД в файлах хостинга.
P.S.: САйты у меня в виде статических html страниц. Т.е. БД нужна всего с 2 столбцами (урл-он же идентификатор и содержимое).
Ну и чтобы php мог с ней работать)

Я не понял, а базы вообще нет ни одной? Если есть, перетащите весь контент в нее – освободите и эти 10% под обычные файлы.

Comopt:
Я так понимаю что лучше в .htaccess закрыть доступ с этих ip ?

Замучаетесь закрывать. Сделайте более адекватный детект живых пользователей/умных ботов, а потом будете, если нужны бэки, из всего первичного мусора выделять нужные строки.

---------- Добавлено 19.08.2016 в 23:40 ----------

Могу включить захват обращения к файлу стилей или к какому-нибудь баннеру на одном из наших сайтов с сохранением лога в паблике, если хотите.

---------- Добавлено 19.08.2016 в 23:48 ----------

Comopt, кстати, посмотрел на сайт и понял, что на днях где-то пересекались. С сайд-баром помог мой совет или нашли поддержку у кого-то еще?

Мыло нужно маскировать, чтобы боты не утащили. Надеюсь, это временный ящик. Сейчас пришлю привет.

Должно присутствовать хотя бы минимальное разделение труда между несколькими разрабами (и для этого вовсе не обязательно с кем-нибудь из них вместе жить, как это случилось у меня :D, – сделайте кому-то что-то одно и пусть для вас сделают что-то другое). Иногда приходится и заказывать что-нибудь на стороне, куда же без этого. Я к примеру в seo тоже не особо секу, хотя кое-какие простые вещи конечно понимать крайне желательно. Вот вы добавили на свой сайт редирект с /index.php, а убрать этот адрес со страниц сайта не подумали. Это же просто.

Есть пара таких регистраторов (хотя в наше время всякое бывает), либо регайте домены из-под ресов у всем известных регистраторов и в случае чего «перебегайте» к другим ресам, коих у этих регистраторов достаточно.

Всего: 2534