为啥Android在通过蓝牙OPP接收时对可接受的文件类型进行如此严格的限制?

Posted

技术标签:

【中文标题】为啥Android在通过蓝牙OPP接收时对可接受的文件类型进行如此严格的限制?【英文标题】:Why does Android limit the acceptable file types so strictly while receiving via Bluetooth OPP?为什么Android在通过蓝牙OPP接收时对可接受的文件类型进行如此严格的限制? 【发布时间】:2011-09-24 23:46:43 【问题描述】:

问候***。

最近在跟踪android框架中的蓝牙运行机制。我注意到this patch 在通过 OPP 接收文件时有一些文件类型限制。

com.android.bluetooth.opp 包中,Constants.java 中有一个固定的白名单

/**
 * The MIME type(s) of we could accept from other device.
 * This is in essence a "white list" of acceptable types.
 * Today, restricted to images, audio, video and certain text types.
 */
public static final String[] ACCEPTABLE_SHARE_INBOUND_TYPES = new String[] 
    /* ... some types such as images and music ... */
;

这限制了 BluetoothOppObexServerSession.java 中可接受的文件类型

        // Reject policy: anything outside the "white list" plus unspecified
        // MIME Types.
        if (!pre_reject
            && (mimeType == null || (!Constants.mimeTypeMatches(mimeType,
                    Constants.ACCEPTABLE_SHARE_INBOUND_TYPES)))) 
        if (D) Log.w(TAG, "mimeType is null or in unacceptable list, reject the transfer");
        pre_reject = true;
        obexResponse = ResponseCodes.OBEX_HTTP_UNSUPPORTED_TYPE;

在这种情况下,是什么让我们担心 MIME 类型?据我所知,我们可能希望阻止可执行文件(即 *.apk、*.so),因为这些文件可能会损害我们的设备。如果阻止某些特定类型是我们在这里设置列表的原因,为什么我们会在此补丁之前使用白名单而不是黑名单?当我们通过 HTTP 等其他非蓝牙协议传输文件时,是否有类似的限制?

【问题讨论】:

【参考方案1】:

我对您的问题投了赞成票,同时将其标记为非建设性的。这个问题很好,但问错了地方:您需要在 android 错误跟踪器中将您的投诉作为错误/建议提交。

回答您的问题 - 通过限制用户使用枪和自己的脚来避免让用户在脚上开枪是一种趋势。也许自定义 ROM 不受此限制。

【讨论】:

感谢您的回答!下次我会更仔细地选择我的问题。【参考方案2】:

OBEX 配置文件有望实现正在交换的内容格式的应用级互操作性。例如,如果推/拉名片,则本地应用程序应了解名片格式,以便能够在适当的位置(例如联系人位置)显示名片,并应了解在其本地联系人应用程序中显示的格式. OPP 指定电话簿 (vCard) 日历、消息、便笺等的内容格式。 因此,服务器应该支持客户端尝试发送的特定对象格式,以便能够对接收到的对象采取适当的操作。

对于更通用的文件传输/交换,可以使用 FTP 配置文件。

【讨论】:

以上是关于为啥Android在通过蓝牙OPP接收时对可接受的文件类型进行如此严格的限制?的主要内容,如果未能解决你的问题,请参考以下文章

通过 OBEX Object PushProfile 通过蓝牙接收文件

Android 蓝牙开发OPP传输文件

蓝牙 OPP 配置文件 - '客户端代理不可用'

为啥电脑的蓝牙只能发送文件,而不能接收文件

使用蓝牙打开远程设备文件管理器 [Android]

如何通过蓝牙接收图像