Запретить символ в УРЛ-ах
Есть уязвимость в elfchat, если пользователь кидает такую сссылку: http://сайт/chat/exit.php?img=exit.jpg
То всех из чата выкидывает. Создатель чата пишет: Тут нужно исправить регулярку - запретить "?" в URL-ах. Но как это сделать так и не написал. вот кусок кода, как я понял в нем нужно поставить запрет:
// URI
var regexUrl = /(https?):\/\/((?:[a-z0-9.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?/i;
function UriCallback(m,p1,p2,p3,p4,p5,p6,p7,p8,p9)
{
this.uri_count = ++this.uri_count || 0;
var a_uri = '#uri_' + this.uri_count;
if(opt.images)
{
var ext = m.match(/\.([a-z0-9]+)$/i);
if(ext != null)
{
if( ext[1] == "jpg" || ext[1] == "jpeg" || ext[1] == "gif" || ext[1] == "png" )
{
var img = new load_image(m);
img.load = function () {
var w = img.width;
var h = img.height;
var max = 300;
if(w > max)
{
w = max;
var p = img.width / max;
h = img.height / p;
}
if(h > max)
{
h = max;
var p = img.height / max;
w = img.width / p;
}
var img_html = '<img src="'+m+'" style="width:'+w+'px; height:'+h+'px;">';
if(images_count++ < opt.max_images)
{
setTimeout(function () {
$(a_uri).html(img_html);
if(opt.scroll)
Messages.scroll(1);
}, 1);
}
}
}
}
}
return '<a id="uri_'+this.uri_count+'" href="'+m+'" target="_blank">'+m+'</a>';
}
msg = msg.replace(regexUrl, UriCallback);
}
Помогите кому не в лом, буду благодарен Также прилагаю в архиве весь js фаил. chat.rar |
проверять на эту регулярку перед отправкой сообщения,если есть совпадение -не отправлять
/\/chat\/exit\.php\?img=exit\.jpg/ |
попробуйте поменять эту строку:
if( ext[1] == "jpg" || ext[1] == "jpeg" || ext[1] == "gif" || ext[1] == "png" ) На такую if(( ext[1] == "jpg" || ext[1] == "jpeg" || ext[1] == "gif" || ext[1] == "png" )&&m.match(/(http:\/\/[^\s\?]+)\.(?:jpg|jpeg|gif|png)/ig)==null) (*Поправил |
Цитата:
|
кроме .jpg другие форматы также приводят к вылету ,естественно. Думаю Deff близок к истине, однако чтото не так
|
Spark,
Тады так:
// URI
var regexUrl = /(https?):\/\/((?:[a-z0-9.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?/i;
function UriCallback(m,p1,p2,p3,p4,p5,p6,p7,p8,p9)
{
if(m.match(/(http:\/\/[^\s\?]+)\.(?:jpg|jpeg|gif|png)/ig)==null)
{
this.uri_count = ++this.uri_count || 0;
var a_uri = '#uri_' + this.uri_count;
if(opt.images)
{
var ext = m.match(/\.([a-z0-9]+)$/i);
if(ext != null)
var rep = /[?]/;
if (rep.test(value))
{value = value.replace(rep, ''); input.value = value;}
{
if( ext[1] == "jpg" || ext[1] == "jpeg" || ext[1] == "gif" || ext[1] == "png" )
{
var img = new load_image(m);
img.load = function () {
var w = img.width;
var h = img.height;
var max = 300;
if(w > max)
{
w = max;
var p = img.width / max;
h = img.height / p;
}
if(h > max)
{
h = max;
var p = img.height / max;
w = img.width / p;
}
var img_html = '<img src="'+m+'" style="width:'+w+'px; height:'+h+'px;">';
if(images_count++ < opt.max_images)
{
setTimeout(function () {
$(a_uri).html(img_html);
if(opt.scroll)
Messages.scroll(1);
}, 1);
}
}
}
}
}
return '<a id="uri_'+this.uri_count+'" href="'+m+'" target="_blank">'+m+'</a>';
}
msg = msg.replace(regexUrl, UriCallback);
}
}
|
вообще то подобные дырки нужно закрывать на стороне сервера а не на стороне клиента.
|
devote,
Там фигня в том что подгружаемый URL картинки = не картинка = а HTML cтраница( это защита хостингов картинок хранения для выдачи рекламы - тут вродь сервер чата не причем? Ну кнешн можно переваивать скрипт на парсинг картинок сервером - а не на клиенте |
Deff,
всё равно вылетает. Причем вообще не важно какой формат написан после точки, щас проверил |
В чем заключается уязвимость то? Как она влияет на скрипты?
|
Spark,
Передвинул Выше |
Deff,
Не помогает. Если в сервере проблема, тогда почему на других сайтах с этим чатом такая же проблема? |
Spark,
Еще попытка: - убрать все предыдущие правки и воткнуть сюды
function load_image(url)
{
if(url.match(/(http:\/\/[^\s\?]+)\.(?:jpg|jpeg|gif|png)/ig)==null) url=http://forum.mybb.ru/i/blank.gif;
this.load = null;
this.width = 0;
this.height = 0;
var self = this;
var img = new Image();
img.onload = function () {
self.width = this.width;
self.height = this.height;
if(self.load != null)
self.load(self);
}
img.src = url;
}
|
Deff,
а куда именно? попробавал по разному, с этим кодом окна чата вообще не видно, только строка набора |
Spark,
Там в скрипте функция: Цитата:
|
Deff,
без изменений, все также вылетает |
Тады нун просто менять эту регулярку (походу трабл именно в ней - поскольку пути за ней все исследовали
var regexUrl = /(https?):\/\/((?:[a-z0-9.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?/i;
Или кто седни поможет или я завтра (чот уже голова не варит |
Цитата:
Цитата:
|
Spark,
:write: Пока не остыл Вариант NN Это Цитата:
Цитата:
|
Deff,
Спасибо тебе за потраченное время и шевеления мозгом:thanks: , но не помогает:( |
Spark,
Значит до завтра |
Цитата:
Добавьте в конце ссылки на загружаемый файл скрипта chat.js?2 Без смены имени, скрипт не подгружается - а используется кешированная версия |
Deff,
попробавал почистить кеш в браузере, да вы действительно правы. Последний вариант работает! |
Цитата:
Поставить миникартинку -уведомление - "недопустимые ссылки" или ругательный смайлик |
это я уже сам понял, и уже поставил. Спасибо вам огромное!
|
Пи*ц. Больному туберкулёзом зашили рот, и типа нормально. А чО: не кашляет, других не заражает...
|
Aetae,
Гы - критик, сплошной - а где Вы были, кады я хоть криво - но помогал 17 часов не спамши ? |
А смысл? Если вылетает "у всех", то проблема со стороны сервера в любом случае. Толку никакого.
|
Aetae,
Та вылетает у Всех - |
Aetae,
Ну от ваших постов тем более никакого. Deff, Решил проблему, незнаю че вам не нравится, теперь никто не вылетает |
Цитата:
PS. А создатель чата странный, нашел какой совет дать. |
Ващет Aetae, в словах есть правда - тут нун по хорошему и тут и там делать правки: клиентcкий скрипт не должен выводить картинку в чат без сервера, а, серв не должен выпускать это изо, на клиента, - но это имхо не дело правки тут - скрипт автора -пущай Он и правит
|
devote,
Ну а конкретно, как он это осуществит, и как это решается? |
Цитата:
|
| Часовой пояс GMT +3, время: 01:37. |