Я рад, что браузеры хотят спасти нас от навязчивых скриптов и т. п. Я не доволен тем, что IE помещает что-то в браузер, что делает простой стиль-fix похожим на хакерскую атаку!
Я использовал & lt; span>, чтобы представить входной файл, чтобы я мог применить соответствующий стиль к & lt; div> вместо & lt; input> (еще раз, из-за IE). Теперь из-за этого IE хочет показать пользователю путь со значением, который просто гарантированно поставит их на страже и, по крайней мере, опасается (если не полностью их отпугнуть?!) ... БОЛЬШЕ IE-CRAP!
Во всяком случае, благодаря тем, кто разместил объяснение здесь: Безопасность браузера IE: добавление «fakepath» в путь к файлу во входном файле [type = «file»] , я собрал minor fixer-upper ...
Нижеприведенный код выполняет две функции: он исправляет ошибку IE8, в которой событие onChange не срабатывает до тех пор, пока поле onBlur не выведет поле и не обновит элемент с очищенным файловым пути, который не пугает пользователя.
// self-calling lambda to for jQuery shorthand "$" namespace
(function($){
// document onReady wrapper
$().ready(function(){
// check for the nefarious IE
if($.browser.msie) {
// capture the file input fields
var fileInput = $('input[type="file"]');
// add presentational tags "underneath" all file input fields for styling
fileInput.after(
$(document.createElement('span')).addClass('file-underlay')
);
// bind onClick to get the file-path and update the style
fileInput.click(function(){
// need to capture $(this) because setTimeout() is on the
// Window keyword 'this' changes context in it
var fileContext = $(this);
// capture the timer as well as set setTimeout()
// we use setTimeout() because IE pauses timers when a file dialog opens
// in this manner we give ourselves a "pseudo-onChange" handler
var ieBugTimeout = setTimeout(function(){
// set vars
var filePath = fileContext.val(),
fileUnderlay = fileContext.siblings('.file-underlay');
// check for IE's lovely security speil
if(filePath.match(/fakepath/)) {
// update the file-path text using case-insensitive regex
filePath = filePath.replace(/C:\\fakepath\\/i, '');
}
// update the text in the file-underlay
fileUnderlay.text(filePath);
// clear the timer var
clearTimeout(ieBugTimeout);
}, 10);
});
}
});
})(jQuery);
7
задан Mark Renouf 27 August 2008 в 14:15
поделиться
Я не думаю, что существует что-либо волшебное о том, что Вы делаете здесь - не мог, что Вы делаете быть описанными как:
"При производстве мы записываем уникальное число в каждое из наших устройств, которое оба читаемо конечным пользователем (это находится на маркировке), и доступный для внутреннего процессора. Наши пользователи должны ввести этот номер в наш веб-сайт наряду с их деталями кредитной карты, и поле впоследствии связывается к веб-сайту для разрешения работать"
"По совпадению мы также используем это число в качестве MAC-адреса для сетевых пакетов, поскольку мы должны исключительно присвоить это во время производства так или иначе, таким образом, это сохранило нас копирующий этот бит работы"
Я сказал бы, что две очевидных опасности:
Люди бездельничают с Вашим устройством и изменяют этот адрес на тот, который кто-то еще уже активировал. Произойдет ли это, вероятно, зависит от некоторых отношений между тем, как трудно это и насколько дорогой независимо от того, что они добираются для кражи. Вы могли бы хотеть думать о том, как легко они могут взять файл обновления микропрограммы и вытащить код из него.
Кто-то использует комбинацию правил брандмауэра/маршрутизатора и небольшого количества заказного программного обеспечения для генерации сервера, который копирует эксплуатацию 'подлинного сервера' и дает разрешение к устройству продолжаться. Вы могли сделать это тяжелее с некоторой комбинацией hashing/PKE как часть протокола.
Как всегда некоторый утомительный, дорогой одноразовый взлом в основном не важен, что Вы не хотите, повреждение класса, которое может быть распределено по Интернету к каждому ворующему dweep.
Я не думаю, что известный spoofability MAC-адресов является проблемой в этом случае. Я думаю, что tweakt просто желает использовать их для начальной идентификации. Устройство может считать свой собственный MAC-адрес, и установщик может (как долго, поскольку это печатается на маркировке), читает то же число и знают, "хорошо - это - поле, которое я поместил в местоположение A".
tweakt - эти поля звонили бы в сервер производителя или сервер компании/человека с помощью них (или это - то же самое в этом случае)?
MAC-адрес так уникален, как порядковый номер распечатал на руководстве/этикетке.
Microsoft делает хеширование, чтобы предотвратить спуфинг MAC-адреса и позволить немного больше конфиденциальности.
С единственным подходом MAC можно легко соответствовать устройству клиенту, только находясь в той же подсети. Хеш предотвращает это, будучи непрозрачным к тому, какие критерии используются и никакой способ перепроектировать отдельные части.
(см., что пароль хеширует),
С точки зрения безопасности я знаю, что возможно имитировать MAC, хотя я не совсем уверен, насколько трудный это или что это влечет за собой.
Иначе, если у клиентов нет легкого доступа к аппаратным средствам или ОС, необходимо быть довольно безопасным выполнением этого..., вероятно, лучше всего для помещения этикетки предупреждения на высказывание, что питание с чем-либо разрушит коммуникацию к серверу.