Vra

Ek is op soek na inspekteer SQL-stellings in Java / JDBC-kode om te verseker dat die SQL uitgevoer moet word is van aanvaarbare gehalte. Nie PMD nie Findbugs blyk te JDBC of sql reëls het. Ek kon p6spy gebruik om die SQL te meld en kyk na die manier, maar dit is handleiding.

Ek wonder of die strategie van die gebruik van PMD / Findbugs / ens 'n reël dat 'n string geslaag om PreparedStatement skep waar daar is 'n "=" of "in" is net parametrized VARs op die vergelyk kant.

Het iemand dit gedoen? Of dit gedoen deur 'n ander manier?

Was dit nuttig?

Oplossing

Dit is 'n moeilike probleem. Vergelyking operateurs soos = en IN() is 'n paar gevalle, maar daar is ook:. != <> < <= > >= LIKE

Hoe kan jy gevalle sien van interpol aansoek veranderlikes as vasgekodeerde in uitdrukkings?

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

Jy kan soek vir SQL bevat string skeiding karakters, maar SQL-inspuiting nie net kom uit interpol karkaterkonstantes.

Hoe sou jy gevalle van interpol aansoek veranderlikes as anders as datawaardes dinge raak te sien?

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

Ek het nie 'n outomatiese manier om SQL-inspuiting foute op te spoor weet. -Kode resensie is oor 'n meer doeltreffende manier om hulle raak te sien. In elke SQL-stelling wat geïnterpoleerde aansoek veranderlikes bevat, het jy om te bevestig dat die aansoek veranderlikes is "veilig" en dat jou app hulle uitdruklik het bevestig of verander hulle, sodat hulle nie gevaarlik loonvrag bevat.

Ander wenke

Het jy die vermoë om die aansoek met 'n debugger verbind om dit heeltemal te toets?

Stel 'n breekpunt in implementering van Connection.createStatement () jou JDBC bestuurder se en die jeug hardloop ... (of as die gebruik van 'n bestuurder waarvoor jy nie bronkode, skryf 'n vals bestuurder wat net afgevaardigdes oproepe na die ware een, en teken alle gevalle van createStatement ())

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top