示例#1
0
    def test_is_sanitised_true(self):
        cfg_node_1 = Node('Awesome sanitiser',
                          None,
                          line_number=None,
                          path=None)
        cfg_node_2 = Node('something.replace("this", "with this")',
                          None,
                          line_number=None,
                          path=None)
        sinks_in_file = [
            vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)
        ]
        sanitiser_dict = {'escape': [cfg_node_1]}

        # We should use mock instead
        orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements
        ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements

        lattice = Lattice([cfg_node_1, cfg_node_2],
                          analysis_type=ReachingDefinitionsTaintAnalysis)
        constraint_table[cfg_node_2] = 0b1

        result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict,
                                              lattice)
        self.assertEqual(result, True)
        # Clean up
        ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements
示例#2
0
    def test_build_sanitiser_node_dict(self):
        self.cfg_create_from_file('example/vulnerable_code/XSS_sanitised.py')
        cfg_list = [self.cfg]

        FrameworkAdaptor(cfg_list, [], [], is_flask_route_function)

        cfg = cfg_list[1]

        cfg_node = Node(None, None,  line_number=None, path=None)
        sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node)]

        sanitiser_dict = vulnerabilities.build_sanitiser_node_dict(cfg, sinks_in_file)
        self.assert_length(sanitiser_dict, expected_length=1)
        self.assertIn('escape', sanitiser_dict.keys())

        self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3])
示例#3
0
    def test_is_sanitized_false(self):
        cfg_node_1 = Node('Not sanitising at all',
                          None,
                          line_number=None,
                          path=None)
        cfg_node_2 = Node('something.replace("this", "with this")',
                          None,
                          line_number=None,
                          path=None)
        sinks_in_file = [
            vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)
        ]
        sanitiser_dict = {'escape': [cfg_node_1]}

        ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements
        lattice = Lattice([cfg_node_1, cfg_node_2],
                          analysis_type=ReachingDefinitionsTaintAnalysis)
        constraint_table[cfg_node_1] = 0
        constraint_table[cfg_node_2] = 0

        result = vulnerabilities.is_sanitized(sinks_in_file[0], sanitiser_dict,
                                              lattice)
        self.assertEqual(result, False)