为什么Android在通过蓝牙OPP接收时如此严格地限制可接受的文件类型



问候stackoverflow。

最近,我正在追踪安卓框架中的蓝牙操作机制。我注意到,在通过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(传输文件时,是否存在类似的限制?

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

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

我对你的问题进行了投票,同时将其标记为非建设性问题。这个问题很好,但问错了地方:你需要在android bug tracker中作为bug/建议提交投诉。

为了回答你的问题,这是一种不让用户用枪和自己的脚开枪的倾向。也许自定义ROM不受此限制。

最新更新