Exemple 4 : validation approfondie

Lorsque vous examinez le code de l'exemple 4, le premier examen inclut trois AppScan® Traces Source avec une racine aux routines de trace correspondantes. Suppose la sélection de la méthode FileInputStream.read dans trace1 et l'ajout de la routine validate. Les sections à la suite de l'exemple de code source décrivent les effets de chaque portée pour la routine de validation.

public class TestCase_IOT_UserValidation {
    ResultSet resultSet;
    FileInputStream fileInputStream;
    PrintWriter printWriter;
    byte[] buffer;

    public static void main(String[] args) throws Exception {
        TestCase_IOT_UserValidation testCase = new TestCase_IOT_UserValidation();
        testCase.trace1();

        TestCase_IOT_UserValidation testCase2 = new TestCase_IOT_UserValidation();
        testCase2.trace2();

        TestCase_IOT_UserValidation testCase3 = new TestCase_IOT_UserValidation();
        testCase3.trace3();
    }

    private void trace1() throws Exception {
        String source = getVulnerableSource1();
        source = validate(source);
        writeToVulnerableSink(source);
    }

    private void trace2() throws Exception {
        String source = getVulnerableSource2();
        source = validate(source);
        writeToVulnerableSink(source);
    }

    private void trace3() throws Exception {
        String source = getVulnerableSource3();
        source = validate(source);
        writeToVulnerableSink(source);
    }

    public String getVulnerableSource1() throws Exception {
        fileInputStream.read(buffer);
        return new String(buffer);
    }

    public String getVulnerableSource2() throws Exception {
        fileInputStream.read(buffer);
        return new String(buffer);
    }

    public String getVulnerableSource3() throws Exception {
        return resultSet.getString("x");
    }

    public void writeToVulnerableSink(String str) throws Exception {
        printWriter.write(str);
    }

    private String validate(String source) throws Exception {
        // validate
        return source;
    }
}

Routine de validation spécifique à un site d'appel - Entrées pour cet appel de FileInputStream.read

Créez une routine de validation spécifique à un site d'appel lorsque cette validation n'est adaptée qu'à un concept très étroit ou que la méthode d'entrée est trop générique pour ne prévoir qu'une seule routine de validation. Lorsque vous sélectionnez Appliquer à cet appel de FileInputStream.read dans la méthode trace1, trace1 n'apparaît pas comme une constatation après l'examen suivant étant donné que sa pile d'appels inclut un appel de la méthode validate. Cependant, trace2 est toujours signalé bien qu'il appelle validate, étant donné que la portée de la routine de validation est liée au site d'appel trace1. La méthode trace3 appelle également validate, mais continue à être signalée car elle utilise ResultSet.getString comme source.

Routine de validation spécifique à une API - Entrées pour cet appel de FileInputStream.read

Créez une routine de validation spécifique à une API lorsque la validation est applicable uniquement pour une source déterminée. Lorsque vous sélectionnez la méthode Appliquer à tout appel de FileInputStream.read, les méthodes trace1 et trace2 ne génèrent pas de constatation à l'examen suivant car elles incluent un appel de la méthode validate. Cependant, la méthode trace3 continue à être signalée bien qu'elle appelle validate vu qu'elle utilise ResultSet.getString comme source.