为什么Android通过蓝牙OPP接收时严格限制可接受的文件types?

问候stackoverflow。

最近,我正在追踪Android框架中的蓝牙操作机制。 我注意到这个补丁在通过OPP接收文件时会产生一些文件types限制。

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中可接受的文件types

  // 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; 

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

我把你的问题投了票,并在同一时间将其标记为非建设性的。 这个问题很好,但是在错误的地方被问到:你需要在android bug跟踪器中提交你的投诉作为错误/建议。

为了回答你的问题 – 这是一种不让用户通过限制他对枪支和自己的脚进行射击来自我射击的倾向。 也许自定义ROM不受此限制。

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

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