$30 off During Our Annual Pro Sale. View Details »

Webアプリケーションテストを用いた
SQLクエリのホワイトリスト自動作成手法@WSA2

 Webアプリケーションテストを用いた
SQLクエリのホワイトリスト自動作成手法@WSA2

野村孔命, 力武健次*, 松本亮介 / ペパボ研究所 / *力武健次技術士事務所
2018.05.12 第2回Web System Architecture研究会

Komei Nomura

May 12, 2018
Tweet

More Decks by Komei Nomura

Other Decks in Research

Transcript

  1. ໺ଜ޸໋, ྗ෢݈࣍*, দຊ྄հ / ϖύϘݚڀॴ / *ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ
    2018.05.12 ୈ2ճWeb System Architectureݚڀձ
    WebΞϓϦέʔγϣϯςετΛ༻͍ͨ

    SQLΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏

    View Slide

  2. ໺ଜ ޸໋ / @komei
    2
    Komei Nomura
    ٕज़෦ ݚڀ։ൃνʔϜ
    ϖύϘݚڀॴ ݚڀһ
    GMOϖύϘגࣜձࣾ

    View Slide

  3. 1. ݚڀͷഎܠ
    2. ैདྷͷෆਖ਼ΫΤϦݕ஌ͷ՝୊
    3. ఏҊख๏
    4. ·ͱΊͱࠓޙͷ՝୊
    3
    ໨࣍

    View Slide

  4. 1.
    ݚڀͷഎܠ

    View Slide

  5. • WebΞϓϦέʔγϣϯʢWebΞϓϦʣͷ੬ऑੑΛར༻ͨ͠߈ܸ͸ޙΛઈͨͳ͍
    • ߈ܸʹΑͬͯWebαʔϏε͕อ༗͢Δൿີ৘ใ͕࿙Ӯ͢Δඃ֐͕ൃੜ
    • WebΞϓϦ͕ར༻͢Δσʔλϕʔεʹෆਖ਼ΫΤϦΛൃߦ࣮͠ߦ͢Δ͜ͱͰ

    ߦΘΕΔ
    • 1ͭͷෆਖ਼ΫΤϦͷ࣮ߦ͕େن໛ͳ৘ใ࿙ӮΛҾ͖ى͜͢͜ͱ΋͋Δ
    • ෆਖ਼ΫΤϦΛݕ஌࣮͠ߦΛఀࢭ͢Δରࡦ͕ඞཁ
    5
    ݚڀͷഎܠ

    View Slide

  6. • ෆਖ਼ΫΤϦͷରࡦ͸ॏཁ͕ͩɼαʔϏεͷ։ൃ΍ӡӦʹӨڹΛ༩͑ͨ͘ͳ͍
    • WebαʔϏεͷಛ௃Λߟྀ͢Δඞཁ͋Γ
    • WebαʔϏε͸සൟʹ࢓༷มߋ͞ΕWebΞϓϦͷվम͕ߦΘΕΔ
    • ։ൃϓϩηε΁ͷӨڹΛখ͘͞
    • WebαʔϏεͷ࣮૷ʹ͸༷ʑͳݴޠʢPHP, RubyͳͲʣ͕༻͍ΒΕΔ
    • ͦΕͧΕʹରࡦΛ࣮૷͢Δ͜ͱ͸։ൃऀͷෛ୲ͱͳΔ
    • WebαʔϏεͷ࣮૷ʹґଘ͠ͳ͍ํ๏͕ඞཁ
    6
    WebαʔϏεʹ͓͚Δෆਖ਼ΫΤϦରࡦ

    View Slide

  7. 2.
    ैདྷͷෆਖ਼ΫΤϦݕ஌ͷ՝୊

    View Slide

  8. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦͷϦετʢϗϫΠτϦετʣΛ࡞੒ͯ͠ෆਖ਼ΫΤϦ
    Λݕ஌͢Δํࣜ
    • WebΞϓϦͷେن໛Խ΍ෳࡶԽʹ൐͍WebΞϓϦ͕ൃߦ͢ΔΫΤϦ͕૿େ
    • WebαʔϏε͸࢓༷มߋʹΑΓWebΞϓϦ͕ൃߦ͢ΔΫΤϦ͕มԽ
    • ൃߦ͢ΔΫΤϦͱϗϫΠτϦετͷ੔߹ੑΛऔΔඞཁ͕͋Δ
    • WebαʔϏεӡ༻ऀͷෛ୲͕૿େ͢Δ܏޲͕͋Δ
    8
    ैདྷͷෆਖ਼ΫΤϦݕ஌ํࣜͱ՝୊

    View Slide

  9. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦ͸࣮ࡍʹൃߦ͞ΕͨΫΤϦ΍ιʔείʔυ͔Β
    ݶఆͰ͖Δ
    • ϗϫΠτϦετΛࣗಈͰ࡞੒͢Δख๏͕ఏҊ͞Ε͍ͯΔ
    • WebΞϓϦՔಇ࣌ͷΫΤϦΛ༻͍ͯ࡞੒
    • WebΞϓϦͷιʔείʔυΛղੳͯ͠࡞੒
    9
    ෆਖ਼ΫΤϦݕ஌ͷ՝୊ʹର͢Δैདྷख๏

    View Slide

  10. • WebΞϓϦՔಇ࣌ʹൃߦ͞ΕͨΫΤϦΛֶशͯ͠ϗϫΠτϦετΛ࡞੒͢Δ
    • WebΞϓϦͷ࣮૷ʹґଘͤͣϗϫΠτϦετΛ࡞੒Մೳ
    10
    WebΞϓϦՔಇ࣌ͷΫΤϦΛ༻͍ͨࣗಈ࡞੒ख๏
    σʔλϕʔε
    8FCΞϓϦ
    ΫΤϦ
    ϗϫΠτϦετ
    8FCΞϓϦՔಇ࣌

    View Slide

  11. • WebΞϓϦՔಇ࣌ʹϗϫΠτϦετ࡞੒ͱෆਖ਼ΫΤϦݕ஌͕ࠞࡏ
    • ϗϫΠτϦετ࡞੒த͸ෆਖ਼ΫΤϦͷݕ஌͕Ͱ͖ͳ͍
    • WebαʔϏε͸සൟʹվम͞ΕΔ͜ͱ͔Βݕ஌Ͱ͖ͳ͍ظ͕ؒ૿େ
    • WebΞϓϦՔಈ࣌ʹ͸ෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δঢ়ଶ͕ඞཁ
    • ϗϫΠτϦετͷ࡞੒͸WebΞϓϦՔಈલʹߦ͏ඞཁ͕͋Δ
    11
    WebΞϓϦՔಇ࣌ͷΫΤϦΛ༻͍ͨࣗಈ࡞੒ख๏ͷ՝୊

    View Slide

  12. • WebΞϓϦͷιʔείʔυΛղੳͯ͠ϗϫΠτϦετΛ࡞੒͢Δ
    • WebΞϓϦՔಈલʹϗϫΠτϦετΛ࡞੒Ͱ͖Δ
    • WebΞϓϦՔಈޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δ
    12
    ιʔείʔυղੳΛ༻͍ͨࣗಈ࡞੒ख๏
    ղੳث
    ιʔείʔυ ϗϫΠτϦετ
    8FCΞϓϦՔಈલ

    View Slide

  13. • ιʔείʔυղੳ͕WebΞϓϦͷ࣮૷ʹґଘ͢Δ
    • WebαʔϏεͷ࣮૷ʹ͸༷ʑͳݴޠ͕༻͍ΒΕΔ
    • ͦΕͧΕͷWebαʔϏεʹରͯ͠ղੳثΛ࣮૷͢Δ͜ͱ͸։ൃऀͷෛ୲ͷ
    ૿େʹͭͳ͕Δ
    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍ํ๏͕ඞཁͱͳΔ
    13
    ιʔείʔυղੳΛ༻͍ͨࣗಈ࡞੒ख๏ͷ՝୊

    View Slide

  14. • WebΞϓϦՔಇ࣌ʹൃߦ͞ΕΔΫΤϦΛֶशͯ͠࡞੒͢Δख๏
    • WebΞϓϦՔಇޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍
    • WebΞϓϦͷιʔείʔυΛղੳͯ͠࡞੒͢Δख๏
    • WebΞϓϦͷ࣮૷ґଘͷͨΊɼ։ൃऀ΁ͷෛ୲ͷ૿େ͢Δ
    14
    ैདྷͷϗϫΠτϦετࣗಈ࡞੒ख๏ͷ՝୊·ͱΊ

    View Slide

  15. 3.
    ఏҊख๏

    View Slide

  16. • ैདྷख๏ͷ՝୊͔ΒఏҊख๏͸ҎԼͷཁ݅Λຬͨ͢ඞཁ͕͋Δ
    • WebΞϓϦՔಈલʹϗϫΠτϦετΛ࡞੒Ͱ͖Δ
    • WebΞϓϦͷ࣮૷ʹґଘͤͣϗϫΠτϦετΛ࡞੒Ͱ͖Δ
    • ಋೖ࣌ͷ։ൃϓϩηε΁ͷӨڹ͕খ͍͞
    16
    ఏҊख๏ͷཁ݅

    View Slide

  17. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏
    • ։ൃϓϩηεʹࣗಈςετ͕૊Έࠐ·Ε͍ͯΔલఏ
    • ςετ࣌ʹϗϫΠτϦετΛࣗಈͰ࡞੒͢ΔॲཧΛ௥Ճ
    • ςετ࣌ʹൃߦ͞ΕͨΫΤϦΛ༻͍ͯϗϫΠτϦετΛ࡞੒
    17
    ఏҊख๏

    View Slide

  18. 18
    લఏͱ͢ΔࣗಈςετΛ༻͍ͨ։ൃϓϩηε
    ։ൃ
    ςετίʔυهड़
    αʔόʹ഑ஔ
    ࣗಈςετ
    /P
    :FT
    ӡ༻։࢝
    ςετ੒ޭ
    w ৽ػೳͷ௥Ճ
    w طଘػೳͷमਖ਼
    w 8FCΞϓϦΛಈ࡞ͤ͞Δखॱͱಈ࡞ͷ݁ՌΛهड़
    w ςετίʔυΛݩʹࣗಈͰςετΛ࣮ߦ
    w 8FCΞϓϦͷಈ࡞͕࢓༷௨Γ͔Λ֬ೝ
    w ςετࣦഊɿ8FCΞϓϦͷιʔείʔυ΋͘͠͸

    ɹɹɹɹɹɹςετίʔυʹ໰୊͋Γ
    w ςετ੒ޭɿ8FCΞϓϦ͕࢓༷௨Γʹಈ࡞
    w ৽͍͠8FCΞϓϦͷιʔείʔυΛαʔόʹ഑ஔ
    w ৽͍͠8FCΞϓϦͷӡ༻Λ։࢝

    View Slide

  19. 19
    ։ൃ
    ςετίʔυهड़
    αʔόʹ഑ஔ
    ࣗಈςετ
    ʴ
    ϗϫΠτϦετ࡞੒
    /P
    :FT
    ӡ༻։࢝
    ςετ੒ޭ
    w ࣗಈςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετ
    Λࣗಈ࡞੒
    w ҎԼΛͦΕͧΕαʔόʹ഑ஔ
    w ৽͍͠8FCΞϓϦͷιʔείʔυ
    w ৽͍͠8FCΞϓϦͷΫΤϦͷϗϫΠτϦετ
    ։ൃϓϩηεʹ͓͚ΔఏҊख๏ͷҐஔ෇͚
    w ։ൃϓϩηε΁ͷӨڹ͕খ͍͞
    w ӡ༻։࢝࣌ʹ͸ෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δঢ়ଶ
    w ϗϫΠτϦετͷ໢ཏੑ͸ςετ࣌ʹൃߦ͞ΕͨΫ
    ΤϦʹґଘ
    w ߴ͍ςετΧόϨοδ͕ඞཁ

    View Slide

  20. 20
    ఏҊख๏ͷઃܭ
    σʔλϕʔε
    σʔλϕʔεϓϩΩγ
    8FCΞϓϦ
    ϗϫΠτϦετ
    • σʔλϕʔεͷલஈʹσʔλϕʔεϓϩΩγΛ഑ஔ
    • ςετ࣌ʹ͸ൃߦ͞ΕΔΫΤϦΛσʔλϕʔεϓϩΩγͰऩूͯ͠ϗϫΠτϦε
    τΛ࡞੒ɹˠɹWebΞϓϦͷ࣮૷ݴޠʹґଘ͠ͳ͍

    View Slide

  21. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦ͸ϢʔβೖྗʹΑͬͯมԽ
    • ΫΤϦύλʔϯ͸๲େͱͳΔͨΊ͢΂ͯΛొ࿥͢Δͷ͸ࠔ೉
    • ΫΤϦͷϦςϥϧΛϓϨʔεϗϧμʹஔ͖׵͑ͨΫΤϦߏ଄Λొ࿥
    • ΫΤϦߏ଄͕ҟͳΔ΋ͷΛݕ஌Ͱ͖Δ
    21
    ϗϫΠτϦετͷొ࿥಺༰
    4&-&$5'30.VTFST8)&3&JE
    61%"5&VTFST4&5OBNFb5BJDIJ`8)&3&JE
    %&-&5&'30.VTFST8)&3&JE
    4&-&$5'30.VTFST8)&3&JE
    61%"5&VTFST4&5OBNF 8)&3&JE
    %&-&5&'30.VTFST8)&3&JE
    Ϧςϥϧ

    View Slide

  22. • ΫΤϦߏ଄͕ಉҰͱͳΔ΋ͷ͸ݕ஌Ͱ͖ͳ͍
    22
    ఏҊख๏Ͱݕ஌Ͱ͖ͳ͍ෆਖ਼ΫΤϦ
    ௨ৗɿSELECT * FROM users LIMIT 30
    ҟৗɿSELECT * FROM users LIMIT 1000
    SELECT * FROM users LIMIT ?

    View Slide

  23. • ςετ࣌ʹൃߦ͞ΕΔΫΤϦ͸WebΞϓϦͷಈ࡞ͷաఔͰൃߦ͞ΕΔΫΤϦ
    • ఏҊख๏͸ςετ࣌ʹൃߦ͞ΕΔΫΤϦΛ༻͍ͯϗϫΠτϦετΛ࡞੒
    • ݕ஌͞ΕΔΫΤϦ͸ςετ࣌ʹൃߦ͞Ε͍ͯͳ͍ΫΤϦ
    • ςετ͞Ε͍ͯͳ͍ΫΤϦͱෆਖ਼ΫΤϦؚ͕·ΕΔ
    23
    ఏҊख๏Ͱݕ஌Ͱ͖ΔΫΤϦͷߟ࡯

    View Slide

  24. 24
    ΫΤϦͷ಺แؔ܎
    શͯͷΫΤϦ
    ςετ͞Ε͍ͯΔΫΤϦྖҬ
    ʢϗϫΠτϦετʹొ࿥ʣ
    8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦྖҬ
    ɿςετ͞Ε͍ͯΔΫΤϦྖҬ
    ɿෆਖ਼ΫΤϦྖҬ
    ɿςετ͞Ε͍ͯͳ͍ΫΤϦྖҬ

    View Slide

  25. 25
    ςετΧόϨοδʹΑΔྖҬͷมԽ
    શͯͷΫΤϦ
    ςετ͞Ε͍ͯΔΫΤϦྖҬ
    ʢϗϫΠτϦετʹొ࿥ʣ
    8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦྖҬ
    શͯͷΫΤϦ
    ςετ͞Ε͍ͯΔΫΤϦྖҬ
    ʢϗϫΠτϦετʹొ࿥ʣ
    8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦྖҬ
    ςετΧόϨοδΛ޲্ͤ͞Δ͜ͱͰςετ͞Ε͍ͯΔΫΤϦྖҬΛ֦େ
    ˠɹෆਖ਼ΫΤϦͷݕ஌ਫ਼౓͕޲্
    ɿςετ͞Ε͍ͯΔΫΤϦྖҬ
    ɿෆਖ਼ΫΤϦྖҬ
    ɿςετ͞Ε͍ͯͳ͍ΫΤϦྖҬ

    View Slide

  26. 4.
    ·ͱΊͱࠓޙͷ՝୊

    View Slide

  27. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏
    ͷௐࠪɾݕ౼Λߦͬͨ
    • ఏҊख๏͸ҎԼͷཁ݅ΛຬͨͤΔͱߟ͑ΒΕΔ
    • WebΞϓϦՔಈલʹϗϫΠτϦετΛ࡞੒Ͱ͖Δ
    • WebΞϓϦͷ࣮૷ʹґଘͤͣϗϫΠτϦετΛ࡞੒Ͱ͖Δ
    • ಋೖ࣌ͷ։ൃϓϩηε΁ͷӨڹ͕খ͍͞
    27
    ·ͱΊ

    View Slide

  28. • ఏҊख๏ͷ࣮૷
    • ςετΧόϨοδʹର͢Δෆਖ਼ΫΤϦͷݕ஌ਫ਼౓ͷݕূ
    • ݕ஌ͨ͠ΫΤϦ͕ςετ͞Ε͍ͯͳ͍ΫΤϦ͔ෆਖ਼ΫΤϦ͔ͷ൑அํ๏ͷݕ౼
    • ݱঢ়։ൃऀ೚ͤ
    • ΫΤϦͷϦςϥϧͷෆਖ਼Λݕ஌͢Δํ๏ͷݕ౼
    28
    ࠓޙͷ՝୊

    View Slide