|
|
|
Всем привет!
Запустил сайт мемов, но там такая проблема - юные хакеры пробуют на xss и прочие уязвимости, и вместо обычных мемов получается абракадабра, вроде такого:
Сейчас у меня стоит небольшая защита от xss вида:
Код: |
$pole1 = mb_strtoupper($_GET['pole1'],'UTF-8'); // получаем значение 1
$pole2 = mb_strtoupper($_GET['pole2'],'UTF-8'); // получаем значение 2
$pole1= htmlspecialchars(strip_tags($pole1)); // защита от xss для 1
$pole1= htmlspecialchars(strip_tags($pole1)); // защита от xss для 2
|
Спец.символы нейтрализуются, но все-равно показываются на мемах.
Также хотелось бы как-то "на лету" запретить мемы с матами.
Пожалуйста подскажите, как можно ввести дополнительную проверку, которая при обнаружении, например. одного из этих кусков:
>
<
'
мат 1
мат 2
.com
iframe
- будет показывать предупреждение вместо создания мема?
Заранее большое спасибо! |
|
|
|
|
|
через цикл прогони
эй, ты же мне хольцнера советовал
используй switch и case |
|
|
|
|
|
trepsXe, спасибо!
Сделал просто ограничение только кириллицей и цифрами через preg_match('/[А-Яа-я0-9
Другой вопрос встал, очень актуальный.
Подскажите, как сделать так, чтобы не записывать в базу дубли уже существующих строк?
Т.е. у меня этот код записывает одну строку в файл-базу:
Код: |
$zapis = "http://memino.ru/img/".$filename."|".$overtext."|".$overtext2."|"."\r\n";
$fh = fopen("baza.txt", "a");
fwrite($fh, $zapis);
fclose($fh);
|
Пробовал добавлять
Код: |
$fh = array_map('trim', $fh);
if (array_search($zapis, $fh) !== false)
die('Уже в каталоге!');
|
- вообще перестает работать.
Если не тяжело, подскажите механизм проверки на дублирование перед записью
Заранее большое спасибо! |
|
|
|
|
|
Сорри, тупой вопрос был. У тебя что там файл без структуры штоль? |
|
|
|
|
|
Код: |
$fh = array_map('trim', $fh);
if (array_search($zapis, $fh) !== false)
die('Уже в каталоге!');
|
Какая-то запись странная. Можно же короче:
Код: |
$fh = array_map('trim', $fh);
if (array_search($zapis, $fh)) die('Уже в каталоге!');
|
А что туда записывается-то?)
Может можно как-то без файла этого вообще?) |
|
|
|
|
|
deBrain, не, есть структура, вот такая:
Код: |
http://memino.ru/img/memino.ru-1333723624.jpg|Я ТВОЙ HTTPD|УХО КУСАЛ|
http://memino.ru/img/memino.ru-1333723703.jpg|Я ТВОЙ WINDOWS|ВИНЛОКЕР СТАВИЛ!|
http://memino.ru/img/memino.ru-1333723965.jpg|ЗАПИЛИ МНЕ ЗУБ|БУДЬ МУЖИКОМ БЛЕАТ|
|
Нужно как-то проверять на существование уже существующей строки и если она есть - то не дописывать новую.
А то очень сильно грузит впску и постоянно дубли при просмотре отдельного мема.
deBrain, я в php нубяра, если не затруднит, подскажи, с меня много репы
Заранее большое спасибо! |
|
|
|
|
|
deBrain, не, вот сайт - http://memino.ru.
При создании нового мема - запись о нем записывается img.php в файл-базу, где хранятся все мемы (путь к картинке, первая и вторая строка текста). |
|
|
|
|
|
И ещё. $fh - это у тебя файл. А каким макаром ты делаешь $fh = array_map('trim', $fh);?
Вторым аргументом у array_map должен быть массив, а у тебя там в лучшем случае текст файла, т.е. string, а не array.
Может перед array_map следовало бы сделать какой-нибудь $fh = explode("\n", $fh);? Если у тебя там разделение строками. |
|
|
|
|
|
Т.е. если добавлять новый мем, то надо проверять в файле наличие строки из
Код: |
...|Я ТВОЙ HTTPD|УХО КУСАЛ|
...|Я ТВОЙ WINDOWS|ВИНЛОКЕР СТАВИЛ!|
...|ЗАПИЛИ МНЕ ЗУБ|БУДЬ МУЖИКОМ БЛЕАТ|
|
?
Если так, то не структурированный файл это худшее (без обид), что можно было придумать для реализации этого функционала) |
|
|
|
|
|
deBrain, я не знаю
Вот так сейчас попробовал:
Код: |
$zapis = "http://memino.ru/img/".$filename."|".$overtext."|".$overtext2."|"."\r\n";
$fh = fopen("baza.txt", "a");
$fh = explode("\n", $fh);
$fh = array_map('trim', $fh);
if (array_search($zapis, $fh)) {die('Уже в каталоге!'); } else {
fwrite($fh, $zapis); }
fclose($fh);
|
Создание мема - работает, а вот в файл - не пишет. Но картинка генерится, показывается страница. А в базу - не пишется, проверил.
Вот этот момент бы решить - чтобы в базу писался и не писал, если дубль |
|
|
|
|
|
deBrain писал(а): |
Т.е. если добавлять новый мем, то надо проверять в файле наличие строки из
Код: |
...|Я ТВОЙ HTTPD|УХО КУСАЛ|
...|Я ТВОЙ WINDOWS|ВИНЛОКЕР СТАВИЛ!|
...|ЗАПИЛИ МНЕ ЗУБ|БУДЬ МУЖИКОМ БЛЕАТ|
|
?
Если так, то не структурированный файл это худшее (без обид), что можно было придумать для реализации этого функционала)
|
Не, именно целиком строку! Вместе с первым полем.
Там дело в чем - при генерации может выбираться один из сотен фонов. Даже если фразы одинаковые - фоны практически всегда разные.
То есть, по всей строке смотреть дубль нужно.
Вот таким образом - два разных файла, разные фоны, а фразы - одинаковые:
|
|
|
|
|
|
Поготь, тебе надо не $fh = explode("\n", $fh); , а $fh = explode("\r\n", $fh);
Я что-то не заметил, что у тебя виндовский формат файла.
Объясню на пальцах почему реализация функционала таким методом как ты делаешь - плохая идея.
Ты читаешь файл, он весит, допустим 10 метров. Ладно, хрен с ним. Ты раздупляешь его на массив, что увеличивает размер занимаемой памяти как минимум вдвое (из-за особенностей хранения массивов в PHP), итого имеем 20+ метров. Тебе надо каждую строку раздуплить ещё по символу "|", чтобы можно было сравнивать 2 последние части с тем что мы хотим записать.
Итого имеем:
Код: |
$fh = fopen("baza.txt", "a");
$fh = explode("\r\n", $fh);
$strs = array();
foreach ($fh as $v){
$strs[] = explode('|', $v);
}
foreach ($strs as $v){
if ($filename == $v[0] && $overtext == $v[1] && $overtext2 == $v[2]) die('already exists');
}
|
Как-то так, но у тебя этот скрипт будет жрать оперативы и ресурсов проца много...
Хотя если "То есть, по всей строке смотреть дубль нужно. ", то:
Код: |
$fh = fopen("baza.txt", "a");
$fh = explode("\r\n", $fh);
foreach ($fh as $v){
if ($filename . '|' . $overtext . '|' . $overtext2 == $v) die('already exists');
}
|
|
|
|
|
|
|
deBrain, не получается, вот так сделал:
Код: |
$zapis = "http://memino.ru/img/".$filename."|".$overtext."|".$overtext2."|"."\r\n";
$fh = fopen("baza.txt", "a");
$fh = explode("\r\n", $fh);
foreach ($fh as $v){
if ($filename . '|' . $overtext . '|' . $overtext2 !== $v) { fwrite($fh, $zapis); } else {die('already exists');]
fclose($fh);
|
Он не пишет в базу новую запись (уникальную).
Никак не получается, пойду курить работу с массивами. |
|
|
|
|
|
Блин, вот я туплю:
При каждом обновлении - создается картинка с новым именем (стаб+текущее время). Конечно они все разные будут |
|
|
|
|
|
|
|