Доброго времени суток всем!
Есть у меня форма для закачки картинок на сервер. Она состоит из инпута и имаджа:

Выделить код

Код:

<img  alt="Добавить фото" title="Предпросмотр изображения" name="pict_prev" id="pict_prev" />
<input type="file" name="pict" ID="pict" onchange="pict_onpropertychange()" id="pict" />

Я хочу чтобы при выборе картинки она показывалась пользователю предпросмотром:

Выделить код

Код:

function pict_onpropertychange(){
alert(document.getElementById("pict").value);
document.getElementById("pict_prev").setAttribute("src", document.getElementById("pict").value);
}

Этот код без проблем отрабатывает в ИЕ, но в ФФ изображение на появляется.
Подсткажите плиз в чем может быть проблема?

Надо

setAttribute("src", "file://"+document.getElementById("pict").value+"");

Фокс же так файлы с винта открывает.

horseman
Этот трюк на сервере работать не будет, т.к. политика безопасности запрещает web-страницам загружать локальные ресурсы.

Yan
Безопасности Лисы или Вообще?

stoneflash
Вообще.  Возможность загружать локальные картинки -- дыра в безопасности, которая может позволить сайтам собирать информацию о ПО, установленном у пользователя, и т.п. Любой нормальный браузер этого не позволит.  Я не проверял, но более чем уверен, что IE этого тоже не позволяет.

Yan пишет

Этот трюк на сервере работать не будет, т.к. политика безопасности запрещает web-страницам загружать локальные ресурсы.

При чем здесь сервер? Скрипт по-определению отрабатывается на клиенте а не на сервере. На сервер данные передаются только в виде posto'v geto'v

Yan пишет

Вообще.  Возможность загружать локальные картинки -- дыра в безопасности, которая может позволить сайтам собирать информацию о ПО, установленном у пользователя, и т.п. Любой нормальный браузер этого не позволит.  Я не проверял, но более чем уверен, что IE этого тоже не позволяет.

Посмотрите на аватар stoneflash"а откуда-то он взялся на сайте...?
Его именно загрузили на сервер посредством клиента, наверняка того же самого лиса.
А в том, что это работает на ИЕ- можете убедится сами- весь необходимый код я привел.
Так шо сорри, но это все :offtopic:

horseman пишет
Yan пишет

Этот трюк на сервере работать не будет, т.к. политика безопасности запрещает web-страницам загружать локальные ресурсы.

При чем здесь сервер?...

Имеется в

виду, это не будет работать, когда страница будет отсылаться с сервера. Работать будет только с localhost.

Yan пишет

...не проверял, но более чем уверен, что IE этого тоже не позволяет.

Я проверил на denwer'е, позволяет. (отображает, по крайней мере картинку).

Обрабатываются-то они на клиенте, но если странице, открытой с веба, позволить загружать локальный контент, то она сможет легко залить на сервер любую инфу без ведома пользователя. Тебе бы понравилось, если бы у тебя веб-сайт украл все пароли?

Anton

Я проверил на denwer'е, позволяет. (отображает, по крайней мере картинку).

Мда,  по поводу любого нормального браузера я погорячился. Сейчас пишу из Firefox 0.8, в нём этот баг также присутствует.
INFOMAN
Ну, пароли-то через эту дырку не вытащить, но узнать некоторую информацию о системе пользователя вполне возможно.

horseman
Для примера состряпал страничку, которая грузя локальные картинки, пытается определить установленное у пользователя в C:/Program Files/ ПО:
http://xsms.nm.ru/temp/ie/local_images_detecting/
(К сожалению, я выбрал не самые популярные программы, у Вас их может и не быть, но смысл должен быть понятным).
В ИЕ работает даже с web-сайта (из-за дыры), в Firefox 1.5 и Опера9 только с локалхоста.

Yan

Для примера состряпал страничку, которая грузя локальные картинки, п

Это ли не доказывает, что вышеупомянутый скрипт будет работать?

stoneflash
Только в IE:

Yan пишет

В ИЕ работает даже с web-сайта (из-за дыры), в Firefox 1.5 и Опера9 только с локалхоста.

Кстати, надо бы в IE7 ещё проверить, быть может там эту возможность уже прикрыли.

При чем здесь сервер? Скрипт по-определению отрабатывается на клиенте а не на сервере. На сервер данные передаются только в виде posto'v geto'v

Скрипт грузится с сервера и отрабатывает на клиенте. Если он получит доступ к компьютеру клиента, отправить обратно данные не составит труда, например, через JavaScript через get-запрос, сменив адрес картинки на странице, или документа во фрейме.

INFOMAN пишет

Обрабатываются-то они на клиенте, но если странице, открытой с веба, позволить загружать локальный контент, то она сможет легко залить на сервер любую инфу без ведома пользователя. Тебе бы понравилось, если бы у тебя веб-сайт украл все пароли?

Украсть пароли с функциональностью языка Javascript можно разве что если их хранят в текстовом файле с именем "маи пароли.txt" на рабочем столе...
2Yan: Не могу понять логики твоих постов... То ты говоришь что это невозможно потому что безопасность, то приводишь скрипт, который должен доказывать обратное...
ЗЫ По-поводу http://xsms.nm.ru/temp/ie/local_images_detecting/. Всеми моими браузерами как с локала, так и с сайта он сказал, что нет у меня ничего из этого софта, даже опры, которой я щас пишу.

stoneflash пишет

setAttribute("src", "file://"+document.getElementById("pict").value+"");

Спасибо за мысль, такой код работает:

Выделить код

Код:

function pict_onpropertychange(){
var fName
if (document.all)
    fName=document.getElementById("pict").value;
else{
    fName=String(document.getElementById("pict").value).replace(/\\/g, "/");
    fName="file:///"+fName;
}
	document.getElementById("pict_prev").setAttribute("src", fName);
}

Но, только с локала. Ладно, буду думать дальше.

Добавлено Пнд 12 Фев 2007 12:52:13 :
Есть предположение, что может помочь установка дополнительных привелегий, в часности:

Выделить код

Код:

netscape.security.PrivilegeManager.enablePrivilege("UniversalFileRead");

Но если с локала браузер запрашивает разрешить эти привелегии или нет, но с сервера скрипт отваливается с ошибкой:

uncaught exception: A script from "http://ХХХХХХХХХХХ" was denied UniversalFileRead privileges.

Мож есть какие настройки безопасности лисы, о каких  я не знаю, что-нить типа безопасных узлов ИЕ?

с сервера скрипт отваливается с ошибкой

Неподписанный, наверное, вот и отваливается.

такой код работает...Но, только с локала...

В опере и с локала не работает. horseman, зачем так изощрённо ограничивать круг потенциальных пользователей ресурса ? post-get, и будет работать везде.

ЗЫ По-поводу http://xsms.nm.ru/temp/ie/local_images_detecting/. Всеми моими браузерами как с локала, так и с сайта он сказал, что нет у меня ничего из этого софта, даже опры, которой я щас пишу.

horseman, а почему он так сказал ?

Неподписанный, наверное, вот и отваливается.

А можно чуть подробнее про эту подпись...

В опере и с локала не работает. horseman, зачем так изощрённо ограничивать круг потенциальных пользователей ресурса ? post-get, и будет работать везде.

Блин, опра использует свой префикс при открытии имаджей file://localhost ...
Возможно я дейстительно ставлю заплатки на заплатки, но раньше оно так работало, а начать обьяснять опять юзверям, шо теперь вы должны нажать сначала сюда, увидеть сюда и т.п.- это лишний раз не хоцца. Лучше шоб изменения проходили в бекгранде от них. Ну, если в ближайшее время не найду решения- так и поступлю.

horseman, а почему он так сказал ?

ХЗ это уж к автору скрипта. Я особо не вникал.

horseman

2Yan: Не могу понять логики твоих постов... То ты говоришь что это невозможно потому что безопасность, то приводишь скрипт, который должен доказывать обратное...

Логика проста.
Я знал, что в Firefox и Опера из соображений безопасности web-страницы не имеют права загружать локальные картинки, и по ошибке распространил то же правило на IE.
Когда же выяснилось, что IE, по крайней мере шестой, всё таки это позволяет, написал скрипт, показывающий потенциальную опасность загрузки локальных картинок.

ЗЫ По-поводу http://xsms.nm.ru/temp/ie/local_images_detecting/. Всеми моими браузерами как с локала, так и с сайта он сказал, что нет у меня ничего из этого софта, даже опры, которой я щас пишу.

Смысл скрипта:
- загрузить локальную картинку, например, file:///C:/Program Files/Opera/styles/images/opera.png;
- если размеры картинки больше нуля, значит, у пользователя по этому адресу находится данная картинка, следовательно можно сделать вывод, что установлена Опера;

Браузер делиться такой информацией не должен.

чуть подробнее про эту подпись...

там. Хотя, это было лишь предположение.

начать обьяснять опять юзверям, шо теперь вы должны нажать сначала сюда, увидеть сюда

Мож есть какие настройки безопасности лисы

И в чём будет разница ?

ХЗ это уж к автору скрипта. Я особо не вникал.

Жаль, предположение оправдалось. Иными словами,

...буду думать...

момент ещё не настал ?