Как Вы сражаетесь со спуфингом/фишингом веб-сайта?

есть какая-то агрегированная или групповая операция, которая может сделать эту операцию проще / быстрее

blockquote>

Вы можете запустить MongoDB Aggregation Pipeline для обработки поиска и заменить, затем перебрать результат и отправить неупорядоченные операции массового обновления .

Я напишу приведенные ниже примеры в mongo shell , чтобы сделать его универсальным, но для Mongoose см. - Model.aggregate () ] и Model.bulkWrite () для получения дополнительной информации.

Например, если у вас есть три документа, как показано ниже:

{ "_id": 1, "path": "a,b,c,d" } 
{ "_id": 2, "path": "b,a,c,d" }
{ "_id": 3, "path": "c,b,a" }

Где вы хотели бы заменить a на 1,2,3. Используя конвейер агрегации, создайте новое поле с именем newPath для хранения замещенного результата, как показано ниже:

db.collection.aggregate([
    {"$addFields":{
        "toBeRemoved": "a",
        "replacement": "1,2,3",
    }},  
    {"$addFields":{
        "newPath": {
            "$concat":[
                {"$substrBytes":[
                    "$path", 
                    0, 
                    { "$cond": { 
                            "if": { 
                                "$lt": [ {"$subtract": [{"$strLenBytes": "$path"}, {"$subtract": [ {"$strLenBytes": "$path"}, {"$indexOfBytes":["$path", "$toBeRemoved"]} ] } ]}, 0]
                            }, 
                            "then": 0,
                            "else": {"$subtract": [{"$strLenBytes": "$path"}, {"$subtract": [ {"$strLenBytes": "$path"}, {"$indexOfBytes":["$path", "$toBeRemoved"]} ] } ]}
                        }
                    }]}, 
                "$replacement", 
                {"$substrBytes":[
                    "$path", 
                    {"$add":[{ 
                        "$cond": { 
                            "if": { 
                                "$lt": [ {"$subtract": [{"$strLenBytes": "$path"}, {"$subtract": [ {"$strLenBytes": "$path"}, {"$indexOfBytes":["$path", "$toBeRemoved"]} ] } ]}, 0]
                            }, 
                            "then": 0,
                            "else": {"$subtract": [{"$strLenBytes": "$path"}, {"$subtract": [ {"$strLenBytes": "$path"}, {"$indexOfBytes":["$path", "$toBeRemoved"]} ] } ]}
                        }
                        }, {"$strLenBytes": "$toBeRemoved"}
                    ]}, 
                    {"$subtract": [
                        {"$strLenBytes": "$path"}, 
                        {"$add": [ 
                            {"$indexOfBytes":["$path", "$toBeRemoved"]}, 
                            {"$strLenBytes": "$toBeRemoved"} 
                        ]} 
                    ]}
                ]}
            ]
        },
    }}, 
    {"$project": {
        "toBeRemoved":0, 
        "replacement":0,
    }}
])

Это выведет что-то, как показано ниже:

{ "_id": 1, "path": "a,b,c,d", "newPath": "1,2,3,b,c,d" }
{ "_id": 2, "path": "b,a,c,d", "newPath": "b,1,2,3,c,d" }
{ "_id": 3, "path": "c,b,a",   "newPath": "c,b,1,2,3" }

Обратите внимание, что Агрегация выше была написана так, чтобы ее можно было повторно использовать для другой замены. то есть заменили toBeRemoved на b и replacement на x,y, и это будет работать аналогично.

Приведенный выше конвейер агрегации должен работать для MongoDB v3.4 +. Также стоит отметить, что в настоящее время существует открытый билет SERVER-11947 для добавления поддержки регулярных выражений в язык агрегации.

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

db.collection.bulkWrite(
     [
       { "updateOne" :
          {
             "filter" : { "_id" : 1},
             "update" : { "$set" : { "path" :  } }
          }
       }, 
       { "updateOne" :
          {
             "filter" : { "_id" : 2},
             "update" : { "$set" : { "path" :  } }
          }
       }, 
)
5
задан Assaf Lavie 5 December 2008 в 18:18
поделиться

6 ответов

Ключ к этой проблеме определяет некоторое различие между запросом на реальный сайт и запросом на сайт имитации.

Самым простым различием является некоторое основанное на cookie предпочтение UI. Набор cookie на Вашем (реальном) сайте будет только когда-либо возвращаться в Ваш сайт и никогда не будет отправляться в сайт имитации.

Теперь существует много причин, что допустимый cookie не мог бы быть отправлен в Ваш сайт, пользователь мог бы использовать другой компьютер, или они, возможно, истекли/удалили cookie, но по крайней мере можно гарантировать, что он не будет отправлен в сайт имитации.

1
ответ дан 14 December 2019 в 19:29
поделиться

Я думаю, что единственный ответ здесь должен программировать лучших людей.

Выполнение вещей как настройка появления или загрузка изображения только работает, если пользователь в вопросах на самом деле распознает, когда эти вещи являются неправильными. Я думаю, что большинство пользователей никогда не распознавало бы эти вещи за исключением сайтов, они посещают много. Даже если они сделали они могут приписать его изменению в дизайне веб-сайта и не phish.

1
ответ дан 14 December 2019 в 19:29
поделиться

По определению любое решение, которое полагается на сайт, показывающий Вам персонализированная информация, после того как Вы вошли в систему, неэффективно против phishers. Если Вы попытались войти в систему, они уже успешно выполнились!

FWIW, я еще не знаю реальный ответ, возможно, этот вопрос подбросит некоторые хорошие идеи. Я однако профессионально вовлечен в исследование фишинга, плохих регистраций домена, и т.д.

Я не полагаю, что существует любое значительное техническое решение, которое могут реализовать застройщики веб-сайта. Снова, по определению, если Ваши пользователи прибывают в сайт фишинга, Вы больше не сознаете ситуацию.

Поэтому все текущие технологии антифишинга находятся в браузере, а не в phished сайте.

5
ответ дан 14 December 2019 в 19:29
поделиться

Одно решение состоит в том, чтобы настроить веб-сайт на пользователя. Спуфинг только работает, когда у пользователей есть в основном то же представление веб-сайта (одна имитация - многие жертвы). Таким образом, если бы, например, eBay позволил бы Вам настроить пользовательский цвет фона, необходимо смочь заметить, что страница, которую Вы просматриваете, является некоторой имитацией (который не будет знать Ваш выбор цвета). Действительное решение немного более сложно (как, возможно, секретное ключевое слово, настроенное в браузере, который только браузер может представить в рамках управления паролем или в панель URL, и т.д.), но идея является тем же.

Настройте UI на пользователя, настолько имитирующего (который полагается на большинство пользователей, ожидающих видеть в основном, тот же UI) прекращает работать. Это может быть решение на базе браузера или что-то, что веб-сайты предлагают их пользователям (некоторые уже делают).

0
ответ дан 14 December 2019 в 19:29
поделиться

Я видел некоторые сайты, которые позволяют Вам выбрать "персональный" значок. Каждый раз, когда Вы входите в систему, тот значок отображен как доказательство, что Вы находитесь на их сайте.

-1
ответ дан 14 December 2019 в 19:29
поделиться
  • Можно задать вопрос, когда пользовательский вход в систему (вопрос, который пользователь записал с ответом).

  • Можно отобразить изображение после входа, который загрузил пользователь, если пользователь не видит свое изображение (частный, который только его видел), чем это не реальный веб-сайт.

-1
ответ дан 14 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: