stringtranslate.com

Буфер обмена (вычислительная техника)

Буфер обмена — это буфер, который некоторые операционные системы предоставляют для краткосрочного хранения и передачи внутри и между прикладными программами. Буфер обмена обычно является временным и безымянным, а его содержимое находится в оперативной памяти компьютера . [1]

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

Windows , Linux и macOS поддерживают одну транзакцию буфера обмена. [2] [3]

История

Буферы обмена как буферы для небольших текстовых фрагментов впервые были использованы Пентти Канерва , когда он использовал их для хранения удаленных текстов с целью их восстановления. [4] Поскольку можно было удалить текст в одном месте и восстановить его в другом, термин «удаление» не был тем, что можно было бы ожидать в этом случае. Ларри Теслер переименовал это в 1973 году в « вырезать, копировать и вставить» и придумал термин «буфер обмена» для этого буфера, поскольку этим методам нужен буфер обмена для временного сохранения скопированных или вырезанных данных. [5]

Форматы данных

Приложения взаимодействуют через буфер обмена, предоставляя либо сериализованные представления объекта, либо обещание (для более крупных объектов). [6] В некоторых обстоятельствах передача определенных общих форматов данных может быть достигнута непрозрачно с помощью использования абстрактной фабрики ; например, Mac OS X использует класс NSImage для предоставления доступа к данным изображения, хранящимся в буфере обмена, хотя фактический формат данных изображения, поддерживающих объект, скрыт. Отправляющее и принимающее приложения согласовывают форматы, которые могут быть переданы между ними, часто с активным виджетом GUI, ответственным за предоставление приемлемых преобразований типов. Буфер обмена позволяет передавать общие элементы, такие как URL-адреса, цвета, изображения, строки, атрибутированные строки ( Rich text ) и звуки. Операционная система и набор инструментов GUI могут предоставлять некоторые общие преобразования, например, преобразование из Rich Text в обычный текст и наоборот. Различные идентификаторы типов для передачи данных поддерживаются современными операционными системами, которые могут автоматически предоставлять приемлемые сопоставления между системами типов, такими как между MIME и Uniform Type Identifier . [7] [8]

Компьютерная безопасность

Перехват буфера обмена или инъекция буфера обмена — это эксплойт , при котором содержимое буфера обмена человека заменяется вредоносными данными, такими как ссылка на вредоносный веб-сайт. [9] Например, если пользователь копирует адрес получения криптовалюты в буфер обмена, программа-перехватчик может перезаписать его адресом, контролируемым перехватчиком, так что когда пользователь вставляет адрес, его криптовалюта передается перехватчику вместо предполагаемого получателя. [10] Хотя некоторые уязвимости безопасности были исправлены, JavaScript все еще можно использовать для изменения содержимого буфера обмена с помощью атаки, получившей название «pastejacking». [11] [12] Дилан Эйри, который разработал атаку, создал веб-сайт, демонстрирующий, как этот эксплойт может быть использован для обмана пользователя, заставляя его выполнять команды, которые он не хотел выполнять. [13]

Были эксплойты, когда веб-страницы захватывали данные буфера обмена. В начале 2013 года исследователи выявили риски, исходящие от менеджеров паролей на базе Android , и задокументировали, как пароли в 21 из самых популярных из этих приложений могли быть доступны любому другому приложению на устройстве Android, включая те, которые имеют крайне низкий уровень привилегий. [14] Джо Сигрист отмечает, что это « проблема уровня ОС , которая влияет на все, что работает на Android». [15] [1]

Управление буфером обмена и расширения

Glipper , пример программы управления буфером обмена

Расширения менеджера буфера обмена добавляют функциональность к интегрированным функциям буфера обмена операционной системы. Это приложения, которые позволяют пользователю управлять буфером обмена. На таких платформах, как Linux, которые используют несколько несовместимых наборов инструментов GUI, менеджеры буфера обмена часто используются для передачи данных между приложениями, использующими различные такие фреймворки.

Когда менеджер буфера обмена предоставляет несколько транзакций вырезания и вставки, буфер обмена рассматривается как стопка или альбом вырезок, а новые вырезки и копии помещаются в список последних транзакций. Стандартная операция вставки копирует самую последнюю транзакцию, в то время как специализированные вставки предоставляют доступ к другим сохраненным транзакциям. Эти менеджеры обычно также предоставляют окно, которое отображает историю транзакций и позволяет пользователю выбирать более ранние копии, редактировать их, изменять их формат и даже выполнять поиск среди них.

Поскольку большинство операционных систем (например, Windows, macOS, Linux, X11, Android, iOS) не сохраняют содержимое буфера обмена в каком-либо постоянном хранилище — когда пользователь выходит из системы или перезагружает ее, содержимое буфера обмена удаляется — добавлена ​​функциональность для постоянного сохранения буфера обмена. Другой пример — заставить локальный буфер обмена работать с онлайн-приложениями, сохраняя данные буфера обмена в онлайн-расположении при событии копирования или вырезания, делая эти данные доступными для вставки онлайн-приложениям. Менеджеры буфера обмена также могут служить инструментами для преодоления ограничений программного обеспечения, не поддерживающего копирование и вставку (например, при входе на удаленный сервер Windows нельзя скопировать и вставить свое имя пользователя и пароль).

Буферы обмена, специфичные для операционной системы

AmigaOS

Операционная система Amiga использует 256 блоков, поэтому одновременно можно использовать несколько буферов обмена. [16]

андроид

Android предоставляет буфер обмена, который может содержать до одного объекта клипа и доступен по всей системе. Простой текст хранится непосредственно в буфере обмена; сложные данные хранятся по ссылке. Объект клипа имеет один из трех форматов: текстовая строка, объект URI или намерение. [17]

Для взаимодействия с буфером обмена приложение использует класс ClipboardManager [18] и системные вызовы для вырезания, копирования и вставки объектов.

В Android 8.0 буфер обмена впервые появляется в пользовательском интерфейсе: в ситуации, когда пользователь готовится вставить из буфера обмена, появляется опция «Буфер обмена», которая дает пользователю доступ ко многим объектам, скопированным или вырезанным в буфер обмена в прошлом. Кроме этого, и в более ранних версиях, у пользователя нет доступа к буферу обмена, за исключением приложений, которые делают его доступным для пользователя.

iOS

Буфер обмена называется «pasteboard» в iOS, аналогично OS X. Приложения в этой операционной системе могут создавать дополнительные буферы обмена, называемые экземплярами класса UIPasteboard, которые могут быть публичными или частными. Один экземпляр может содержать один элемент или несколько элементов в разных форматах. [19]

Форматы идентифицируются с помощью унифицированных идентификаторов типов (UTI). [20]

Доступ к данным, содержащимся в буфере обмена, возможен только через графический интерфейс пользователя, а не из системы и приложений.

macOS

Буфер обмена в macOS хранит один элемент в нескольких доступных форматах.

Содержимое буфера обмена можно просмотреть, выбрав пункт меню Показать буфер обмена в меню Правка Finder. Необработанные данные и сохраненные форматы можно просмотреть с помощью ClipboardViewer. [21]

Доступ к буферу обмена из командной строки можно получить с помощью следующих команд: [22] [23]

$ # для копирования данных в буфер обмена: $ echo 'hello world' | pbcopy $ # для вставки из буфера обмена: $ pbpaste hello world   

Microsoft Windows и ReactOS

Буфер обмена в Microsoft Windows и ReactOS хранит один элемент в нескольких доступных форматах.

Каждый элемент имеет по крайней мере один формат буфера обмена, но может иметь различные типы формата тех же данных. Три различных типа возможных форматов: [24]

Вплоть до Windows XP доступ к буферу обмена можно было получить через приложение ClipBook Viewer . [27] В более новых версиях Windows доступ к содержимому можно получить через менеджеры буфера обмена .

Данные можно сохранить в буфере обмена Windows [28] и ReactOS [29] через командную строку с помощью команды clip : [30]

$ # для вставки содержимого папки в буфер обмена: $ dir | clip  

Доступ к буферу обмена также можно получить через PowerShell : [31] [32]

# для вставки содержимого каталога в буфер обмена Set-Clipboard  -Path  "C:\directory\" # для получения содержимого буфера обмена Get-Clipboard

В Windows 10 и Windows 11 есть приложение Clipboard, позволяющее хранить несколько текстовых элементов буфера обмена. Доступ к нему можно получить, нажав Windows+V.

X-Window-система

Система X Window, обычно используемая в системах Unix и Linux, предоставляет три буфера обмена, которые называются «CLIPBOARD», «PRIMARY» и «SECONDARY». [33] Использование и обработка различных вариантов выбора не стандартизированы. Однако большинство современных наборов инструментов и сред рабочего стола, таких как GNOME или KDE , следуют общепринятому соглашению, изложенному в спецификации freedesktop.org . [34] Один вариант, CLIPBOARD, используется для традиционной семантики буфера обмена с сочетаниями клавиш, идентичными Windows. Другой вариант, PRIMARY, является механизмом, специфичным для X11. Данные «копируются» сразу после выделения и вставляются третьей (средней) кнопкой мыши. [35] Эти скопированные данные обычно отделяются от выбора CLIPBOARD и не изменяют его содержимое. [36] SECONDARY планировался как альтернатива PRIMARY, но используется непоследовательно. [33]

Существует два инструмента командной строки (xsel и xclip), которые могут получить доступ к буферу обмена: [37]

$ # для вставки стандартного вывода в буфер обмена с помощью xclip
$ echo text | xclip -in -selection clipboard        $ # для вставки стандартного вывода в буфер обмена с помощью xsel
$ echo text | xsel --clipboard      

Главное отличие OS X от Windows заключается в том, что в буфере обмена CLIPBOARD фактически не хранятся никакие данные, а только ссылка на скопированные или вырезанные данные. Приложение заявляет о праве собственности на выбор CLIPBOARD и сообщает о своем праве собственности X Server. [35] При вставке этих данных данные и их доступные форматы запрашиваются у приложения, которому принадлежит выбор CLIPBOARD. [38]

API-интерфейсы

Приложения могут получать доступ к буферу обмена или его данным через API .

JavaScript

В JavaScript существует класс, который обнаруживает изменения в данных буфера обмена пользователя (ClipboardEvent) [39], а также функции для изменения содержимого буфера обмена или чтения из него (clipboardData.getData(), clipboardData.setData()) [40] , но они поддерживаются не всеми браузерами, поскольку изменение буфера обмена пользователя может представлять угрозу безопасности.

Qt

В Qt существует оболочка для каждой поддерживаемой платформы [41] . Она обеспечивает доступ к буферам обмена оконной системы с использованием класса QClipboard. Этот класс облегчает доступ к общим типам данных с помощью функций. [42] Тип данных элемента, хранящегося в буфере обмена, указывается через MIME, и данные MIME также могут быть помещены в буфер обмена с помощью функций из этого класса.

Смотрите также

Ссылки

  1. ^ ab "Что такое буфер обмена в вычислительной технике? - Определение из Techopedia". Techopedia.com . Архивировано из оригинала 2018-02-02 . Получено 2018-02-01 .
  2. ^ Кимматкар, Саранг Б. (2014). «Расширение функциональности буфера обмена по умолчанию». (IJCSIT) Международный журнал компьютерных наук и информационных технологий 5 . 6 .
  3. ^ Стивенс, Род (2010). Visual Basic 2010: справочник программиста . Библиотека Genesis. Индианаполис, Индиана: Wiley Pub., Inc. ISBN 978-0-470-49983-2.
  4. ^ Моггридж, Билл (2007). Проектирование взаимодействий . Кембридж, Массачусетс: MIT Press. стр. 65 и далее. ISBN 9780262134743.
  5. ^ Ларри Теслер. "A User Experience Retrospective". Архивировано из оригинала 2018-02-02 . Получено 23 января 2018 .
  6. ^ «Перетаскивание файлов». developer.apple.com . Получено 9 декабря 2018 г. .
  7. ^ "NSPasteboard - AppKit | Документация для разработчиков Apple". developer.apple.com . Архивировано из оригинала 2018-05-26 . Получено 9 декабря 2018 .
  8. ^ "Принятие унифицированных идентификаторов типов". developer.apple.com . Архивировано из оригинала 2018-07-21 . Получено 9 декабря 2018 .
  9. ^ "Что такое атака с перехватом буфера обмена? - Определение с сайта WhatIs.com". WhatIs.com . Архивировано из оригинала 2017-01-05 . Получено 4 января 2017 г. .
  10. ^ «Инжектор буфера обмена распространяется под видом браузера Tor». securelist.com . 2023-03-28 . Получено 2024-05-15 .
  11. ^ Чиргвин, Ричард. «Атака Pastejack превращает ваш буфер обмена в угрозу». The Register. Архивировано из оригинала 2017-01-04 . Получено 4 января 2017 г.
  12. ^ «Исследователь предупреждает о хакерских атаках типа «pastejacking», нацеленных на буферы обмена пользователей». Грэм Клули. 26 мая 2016 г. Архивировано из оригинала 2017-01-05 . Получено 4 января 2017 г.
  13. ^ "dxa4481/Pastejacking". GitHub . Архивировано из оригинала 2017-01-04 . Получено 4 января 2017 .
  14. ^ Фаль, Саша; Харбах, Мариан; Олтрогге, Мартен; Мудерс, Томас; Смит, Мэтью (2013). «Эй, ты, убирайся из моего буфера обмена» (PDF) . Финансовая криптография и безопасность данных . Конспект лекций по информатике. Том 7859. С. 144–161. doi :10.1007/978-3-642-39884-1_12. ISBN 978-3-642-39883-4. Архивировано (PDF) из оригинала 2017-09-19 . Получено 4 января 2017 .
  15. ^ «Используете менеджер паролей на Android? Он может быть широко открыт для атак сниффинга». Ars Technica. 21 ноября 2014 г. Архивировано из оригинала 2017-01-04 . Получено 4 января 2017 г.
  16. ^ "Clipboard Device - AmigaOS Documentation Wiki". wiki.amigaos.net . Архивировано из оригинала 2018-02-05 . Получено 2018-02-03 .
  17. ^ "Copy and Paste | Android Developers". developer.android.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-06 .
  18. ^ "ClipboardManager | Android Developers". developer.android.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-02 .
  19. ^ "Pasteboard". developer.apple.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-01 .
  20. ^ "Uniform Type Identifier". developer.apple.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-06 .
  21. ^ "ClipboardViewer". developer.apple.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-06 .
  22. ^ "Копировать в буфер обмена из терминала в OS X". rogeriopvl.com . Архивировано из оригинала 2013-08-15 . Получено 2013-07-02 .
  23. ^ "pbcopy(1) Mac OS X Manual Page". apple.com . Архивировано из оригинала 2014-03-28 . Получено 2013-07-02 .
  24. ^ "Форматы буфера обмена (Windows)". msdn.microsoft.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-03 .
  25. ^ "Стандартные форматы буфера обмена (Windows)". msdn.microsoft.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-03 .
  26. ^ "Формат буфера обмена HTML (Internet Explorer)". msdn.microsoft.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-03 .
  27. ^ "Просмотр и управление буфером обмена в Windows 10/8/7". Windows Club . 2013-04-12. Архивировано из оригинала 2018-02-12 . Получено 2018-02-06 .
  28. ^ "clip | Microsoft Docs". Docs.microsoft.com. 2017-10-16 . Получено 2019-09-26 .
  29. ^ "reactos/base/applications/cmdutils/clip в master · reactos/reactos · GitHub". Github.com . Получено 2019-09-26 .
  30. ^ "Как скопировать вывод командной строки в буфер обмена Windows". www.labnol.org . Архивировано из оригинала 2018-02-07 . Получено 2018-02-06 .
  31. ^ sdwheeler. "Get-Clipboard (Microsoft.PowerShell.Management)". docs.microsoft.com . Архивировано из оригинала 2018-01-26 . Получено 2018-02-06 .
  32. ^ sdwheeler. "Set-Clipboard (Microsoft.PowerShell.Management)". docs.microsoft.com . Архивировано из оригинала 2018-02-07 . Получено 2018-02-06 .
  33. ^ ab "Буфер обмена - ArchWiki". wiki.archlinux.org . Архивировано из оригинала 2018-02-17 . Получено 2018-02-16 .
  34. ^ "clipboards-spec". freedesktop.org. Архивировано из оригинала 2014-12-24 . Получено 2014-08-16 .
  35. ^ ab "Copy & Paste, Drag & Drop [MI Wiki]". wiki.mi.ur.de (на немецком языке). Архивировано из оригинала 2018-02-16 . Получено 2018-02-16 .
  36. ^ "gnu.org". www.gnu.org . Архивировано из оригинала 2017-12-24 . Получено 2018-02-16 .
  37. ^ «Копирование и вставка в системный буфер обмена и из него в командной строке — Фернандо Бассо». fernandobasso.github.io . Архивировано из оригинала 2018-02-07 . Получено 2018-02-06 .
  38. ^ "X Selections, X Cut Buffers и Emacs Kill Rings". www.jwz.org . Архивировано из оригинала 2018-03-04 . Получено 2018-02-02 .
  39. ^ "API буфера обмена и события – ClipboardEvent". www.w3.org . Архивировано из оригинала 2018-01-28 . Получено 2018-02-08 .
  40. ^ "API буфера обмена и события – API синхронного буфера обмена". www.w3.org . Архивировано из оригинала 2018-01-28 . Получено 2018-02-08 .
  41. ^ "platforms\plugins\src - qt/qtbase.git - Qt Base (Core, Gui, Widgets, Network, ...)". code.qt.io . Архивировано из оригинала 2018-02-09 . Получено 2018-02-02 .
  42. ^ "QClipboard Class | Qt GUI 5.10". doc.qt.io . Архивировано из оригинала 2018-02-02 . Получено 2018-02-02 .

Дальнейшее чтение

Внешние ссылки