Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
alx_mszczonow_1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
alx_mszczonow_1
Commits
b979144c
Commit
b979144c
authored
Jul 24, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Parametry i SQLInjection
parent
3b5c93be
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
150 additions
and
4 deletions
+150
-4
OdczytajNiektoreRekordy1.java
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy1.java
+9
-4
OdczytajNiektoreRekordy2.java
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy2.java
+43
-0
OdczytajNiektoreRekordy3.java
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy3.java
+37
-0
OdczytajNiektoreRekordy4.java
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy4.java
+61
-0
No files found.
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy1.java
View file @
b979144c
package
bazy
.
a_poczatek
;
package
bazy
.
a_poczatek
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.swing.*
;
import
javax.swing.*
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.sql.*
;
import
java.sql.*
;
public
class
OdczytajNiektoreRekordy1
{
public
class
OdczytajNiektoreRekordy1
{
// wersja 1 - mało wydajna, bo program ściąga dane całej tabeli i dopiero potem sprawdza if-em
// tak napisany program nie skorzysta w żaden sposób z indeksów zdefiniowanych w bazie danych (nawet, gdyby były)
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
try
(
Connection
c
=
DriverManager
.
getConnection
(
try
(
Connection
c
=
DriverManager
.
getConnection
(
...
@@ -13,18 +17,19 @@ public class OdczytajNiektoreRekordy1 {
...
@@ -13,18 +17,19 @@ public class OdczytajNiektoreRekordy1 {
"vps497901_abc123"
))
{
"vps497901_abc123"
))
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj kod stanowiska"
,
"IT_PROG"
);
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj kod stanowiska"
,
"IT_PROG"
);
//
TODO wypisz tylko pracowników, którzy mają podan
e job_id
//
Wypisz tylko pracowników, którzy mają taki
e job_id
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees"
))
{
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees"
))
{
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
1
);
int
id
=
rs
.
getInt
(
1
);
String
firstName
=
rs
.
getString
(
2
);
String
firstName
=
rs
.
getString
(
2
);
String
lastName
=
rs
.
getString
(
3
);
String
lastName
=
rs
.
getString
(
3
);
String
job
=
rs
.
getString
(
"job_id"
);
String
job
=
rs
.
getString
(
"job_id"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
if
(
StringUtils
.
equalsIgnoreCase
(
job
,
szukanyJob
))
{
System
.
out
.
printf
(
"%d: %s %s (%s) zarabia %s\n"
,
id
,
firstName
,
lastName
,
job
,
salary
);
System
.
out
.
printf
(
"%d: %s %s (%s) zarabia %s\n"
,
id
,
firstName
,
lastName
,
job
,
salary
);
}
}
}
}
}
}
}
...
...
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy2.java
0 → 100644
View file @
b979144c
package
bazy
.
a_poczatek
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.swing.*
;
import
java.math.BigDecimal
;
import
java.sql.*
;
public
class
OdczytajNiektoreRekordy2
{
// Wersja niebezpieczna, narażona na atak SQL-injection. Wpisując spreparowane teksty do okna wyszukiwania,
// można zmienić dane lub zepsuć bazę danych:
// ';update employees set salary = 33000 where employee_id=170; select '
// ';update employees set salary = 1; select '
// ';drop table employees cascade; select '
// xx' OR salary > 15000 OR 'ala' = 'ola
public
static
void
main
(
String
[]
args
)
{
try
(
Connection
c
=
DriverManager
.
getConnection
(
"jdbc:postgresql://vps497901.ovh.net:5432/hr"
,
"kurs"
,
"vps497901_abc123"
))
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj kod stanowiska"
,
"IT_PROG"
);
// Wypisz tylko pracowników, którzy mają takie job_id
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees WHERE job_id = '"
+
szukanyJob
+
"'"
))
{
System
.
out
.
println
(
"Zaraz wykonam: "
+
stmt
);
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
1
);
String
firstName
=
rs
.
getString
(
2
);
String
lastName
=
rs
.
getString
(
3
);
String
job
=
rs
.
getString
(
"job_id"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
System
.
out
.
printf
(
"%d: %s %s (%s) zarabia %s\n"
,
id
,
firstName
,
lastName
,
job
,
salary
);
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy3.java
0 → 100644
View file @
b979144c
package
bazy
.
a_poczatek
;
import
javax.swing.*
;
import
java.math.BigDecimal
;
import
java.sql.*
;
public
class
OdczytajNiektoreRekordy3
{
// Wersja poprawna: wydajna i bezpieczna. Używa parametrów pozycyjnych JDBC.
public
static
void
main
(
String
[]
args
)
{
try
(
Connection
c
=
DriverManager
.
getConnection
(
"jdbc:postgresql://vps497901.ovh.net:5432/hr"
,
"kurs"
,
"vps497901_abc123"
))
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj kod stanowiska"
,
"IT_PROG"
);
// Wypisz tylko pracowników, którzy mają takie job_id
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees WHERE job_id = ?"
))
{
stmt
.
setString
(
1
,
szukanyJob
);
System
.
out
.
println
(
"Zaraz wykonam: "
+
stmt
);
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
1
);
String
firstName
=
rs
.
getString
(
2
);
String
lastName
=
rs
.
getString
(
3
);
String
job
=
rs
.
getString
(
"job_id"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
System
.
out
.
printf
(
"%d: %s %s (%s) zarabia %s\n"
,
id
,
firstName
,
lastName
,
job
,
salary
);
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/java/bazy/a_poczatek/OdczytajNiektoreRekordy4.java
0 → 100644
View file @
b979144c
package
bazy
.
a_poczatek
;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.DriverManager
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.swing.JOptionPane
;
public
class
OdczytajNiektoreRekordy4
{
public
static
void
main
(
String
[]
args
)
{
final
String
url
=
"jdbc:postgresql://vps497901.ovh.net:5432/hr"
;
try
(
Connection
c
=
DriverManager
.
getConnection
(
url
,
"kurs"
,
"vps497901_abc123"
))
{
List
<
String
>
jobs
=
znajdzJoby
(
c
);
String
szukany_job
=
(
String
)
JOptionPane
.
showInputDialog
(
null
,
"Wybierz job"
,
"Pytanie"
,
JOptionPane
.
QUESTION_MESSAGE
,
null
,
jobs
.
toArray
(),
null
);
wypiszJob
(
c
,
szukany_job
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
private
static
List
<
String
>
znajdzJoby
(
Connection
c
)
throws
SQLException
{
List
<
String
>
jobs
=
new
ArrayList
<>();
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT DISTINCT job_id FROM employees ORDER BY 1"
);
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
jobs
.
add
(
rs
.
getString
(
1
));
}
}
return
jobs
;
}
private
static
void
wypiszJob
(
Connection
c
,
String
szukany_job
)
throws
SQLException
{
try
(
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees WHERE job_id = ?"
))
{
// wstawienie wartości do parametru nr 1 (który znak zapytania licząc od lewej), numeracja od 1
stmt
.
setString
(
1
,
szukany_job
);
System
.
out
.
println
(
"Zapytanie do wykonania: "
+
stmt
);
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
"employee_id"
);
String
imie
=
rs
.
getString
(
"first_name"
);
String
nazwisko
=
rs
.
getString
(
"last_name"
);
String
job
=
rs
.
getString
(
"job_id"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
System
.
out
.
printf
(
"Pracownik nr %d: %s %s (%s) zarabia %s\n"
,
id
,
imie
,
nazwisko
,
job
,
salary
);
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment