অনিরাপদ সম্প্রচার রিসিভার

OWASP বিভাগ: MASVS-প্ল্যাটফর্ম: প্ল্যাটফর্ম ইন্টারঅ্যাকশন

ওভারভিউ

অনুপযুক্তভাবে প্রয়োগ করা সম্প্রচার রিসিভারগুলি একটি আক্রমণকারীকে একটি দূষিত উদ্দেশ্য প্রেরণের অনুমতি দিতে পারে যাতে দুর্বল অ্যাপ্লিকেশনটি এমন কাজগুলি সম্পাদন করে যা বহিরাগত কলারদের উদ্দেশ্যে নয়।

দুর্বলতা বলতে সাধারণত এমন দৃষ্টান্তগুলিকে বোঝায় যেখানে সম্প্রচার রিসিভার অনিচ্ছাকৃতভাবে রপ্তানি করা হয়, হয় AndroidManifest-এ android:exported="true" সেট করে অথবা প্রোগ্রাম্যাটিকভাবে একটি ব্রডকাস্ট রিসিভার তৈরি করে যা রিসিভারকে ডিফল্টরূপে সর্বজনীন করে তোলে। যদি রিসিভারে কোনো ইনটেন্ট ফিল্টার না থাকে তবে ডিফল্ট মান "false" কিন্তু যদি রিসিভারে অন্তত একটি অভিপ্রায় ফিল্টার থাকে তাহলে android:exported-এর ডিফল্ট মান হল "true"

সঠিক অ্যাক্সেস নিয়ন্ত্রণ ছাড়াই ইচ্ছাকৃতভাবে রপ্তানি করা সম্প্রচার রিসিভার অপব্যবহার করা যেতে পারে যদি ডেভেলপার এটিকে সমস্ত অ্যাপ্লিকেশন দ্বারা কল করার ইচ্ছা না করে।

প্রভাব

অনিরাপদভাবে বাস্তবায়িত ব্রডকাস্ট রিসিভারগুলিকে আক্রমণকারী দ্বারা অপব্যবহার করা হতে পারে যাতে অ্যাপ্লিকেশনটিতে এমন আচরণ চালানোর জন্য অননুমোদিত অ্যাক্সেস পেতে পারে যা বিকাশকারী তৃতীয় পক্ষের কাছে প্রকাশ করতে চাননি।

প্রশমন

সমস্যাটি সম্পূর্ণভাবে এড়িয়ে চলুন

সম্পূর্ণরূপে দ্বিধা সমাধান করতে, false exported সেট:

<receiver android:name=".MyReceiver" android:exported="false">
    <intent-filter>
        <action android:name="com.example.myapp.MY_ACTION" />
    </intent-filter>
</receiver>

কল এবং কলব্যাক ব্যবহার করুন

যদি আপনি অভ্যন্তরীণ অ্যাপের উদ্দেশ্যে ব্রডকাস্ট রিসিভার ব্যবহার করেন (যেমন ইভেন্ট সমাপ্তির বিজ্ঞপ্তি), আপনি একটি কলব্যাক পাস করতে আপনার কোডটি পুনর্গঠন করতে পারেন যা ইভেন্ট সমাপ্তির পরে চালু হবে।

ইভেন্ট সমাপ্তি শ্রোতা

কোটলিন

interface EventCompletionListener {
    fun onEventComplete(data: String)
}

জাভা

public interface EventCompletionListener {
    public void onEventComplete(String data);
}
নিরাপদ টাস্ক

কোটলিন

class SecureTask(private val listener: EventCompletionListener?) {
    fun executeTask() {
        // Do some work...

        // Notify that the event is complete
        listener?.onEventComplete("Some secure data")
    }
}

জাভা

public class SecureTask {

    final private EventCompletionListener listener;

    public SecureTask(EventCompletionListener listener) {
        this.listener = listener;
    }

    public void executeTask() {
        // Do some work...

        // Notify that the event is complete
        if (listener != null) {
            listener.onEventComplete("Some secure data");
        }
    }
}
প্রধান কার্যকলাপ

কোটলিন

class MainActivity : AppCompatActivity(), EventCompletionListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val secureTask = SecureTask(this)
        secureTask.executeTask()
    }

    override fun onEventComplete(data: String) {
        // Handle event completion securely
        // ...
    }
}

জাভা

public class MainActivity extends AppCompatActivity implements EventCompletionListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SecureTask secureTask = new SecureTask(this);
        secureTask.executeTask();
    }

    @Override
    public void onEventComplete(String data) {
        // Handle event completion securely
        // ...
    }
}

অনুমতি সহ সুরক্ষিত সম্প্রচার রিসিভার

শুধুমাত্র সুরক্ষিত সম্প্রচারের জন্য ডায়নামিক রিসিভার নিবন্ধন করুন (সম্প্রচার যা শুধুমাত্র সিস্টেম স্তরের অ্যাপ্লিকেশন পাঠাতে পারে) অথবা স্ব-ঘোষিত স্বাক্ষর স্তরের অনুমতি সহ।

সম্পদ