### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

It seems that it is possible to receive sns message in an sqs listener if there is a filterpolicy in place for null value in a message attribute, and a message is being sent without the message attribute.

### Expected Behavior

Don't recieve these type of messages

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

`sns subscribe --topic-arn "demoTopicArn"  --protocol sqs --notification-endpoint "demoSqsEndpoint" --attributes '{"RawMessageDelivery": "true"}'`
`sns set-subscription-attributes --subscription-arn demoSubsArn --attribute-name FilterPolicy --attribute-value '{"testForNull": [null,{"anything-but": ["notgood"]}]}'`
`sns publish --topic-arn demoTopicArn --message "testforrecieval"`
`sqs receive-message --queue-url  "demoUrl"`

### Environment

```markdown
- OS: macOS 13.6
- LocalStack: 2.2.0
```


### Anything else?

_No response_
"""
        This method evaluate the filter policy recursively, while still being able to validate the `exists` condition.
        Example:
        nested_filter_policy = {
            "object": {
                "key": [{"prefix": "auto-"}],
                "nested_key": [{"exists": False}],
            },
            "test": [{"exists": False}],
        }
        payload = {
            "object": {
                "key": "auto-test",
            }
        }
        This function then iterates on top level keys of the filter policy: ("object", "test")
        The value of "object" is a dict, we need to evaluate this level of the filter policy.
        We pass the nested property values (the dict) as well as the values of the payload's field to the recursive
        function, to evaluate the conditions on the same level of depth.
        We now have these parameters to the function:
        filter_policy = {