Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
java_dzienna_15_09
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
java_dzienna_15_09
Commits
29574c42
Commit
29574c42
authored
Sep 27, 2022
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OdczytajWybranych - wersja SQL injection i wersja poprawna
parent
a474b366
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
67 additions
and
7 deletions
+67
-7
OdczytajWybranych_v1_If.java
...main/java/zajecia/postgresql/OdczytajWybranych_v1_If.java
+2
-3
OdczytajWybranych_v2_Where.java
...n/java/zajecia/postgresql/OdczytajWybranych_v2_Where.java
+15
-4
OdczytajWybranych_v3_Parametry.java
...va/zajecia/postgresql/OdczytajWybranych_v3_Parametry.java
+50
-0
No files found.
PC24-BazyDanych/src/main/java/zajecia/postgresql/OdczytajWybranych_v1_If.java
View file @
29574c42
...
@@ -29,13 +29,12 @@ public class OdczytajWybranych_v1_If {
...
@@ -29,13 +29,12 @@ public class OdczytajWybranych_v1_If {
ResultSet
rs
=
stmt
.
executeQuery
())
{
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
while
(
rs
.
next
())
{
String
jobId
=
rs
.
getString
(
"job_id"
);
if
(
Objects
.
equals
(
jobId
,
szukanyJob
))
{
int
id
=
rs
.
getInt
(
"employee_id"
);
int
id
=
rs
.
getInt
(
"employee_id"
);
String
firstName
=
rs
.
getString
(
"first_name"
);
String
firstName
=
rs
.
getString
(
"first_name"
);
String
lastName
=
rs
.
getString
(
"last_name"
);
String
lastName
=
rs
.
getString
(
"last_name"
);
String
jobId
=
rs
.
getString
(
"job_id"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
if
(
Objects
.
equals
(
jobId
,
szukanyJob
))
{
System
.
out
.
println
(
"Pracownik nr "
+
id
+
": "
+
firstName
+
" "
+
lastName
+
" ("
+
jobId
+
") zarabia "
+
salary
);
System
.
out
.
println
(
"Pracownik nr "
+
id
+
": "
+
firstName
+
" "
+
lastName
+
" ("
+
jobId
+
") zarabia "
+
salary
);
}
}
}
}
...
...
PC24-BazyDanych/src/main/java/zajecia/postgresql/OdczytajWybranych_v2_Where.java
View file @
29574c42
...
@@ -6,11 +6,19 @@ import java.sql.DriverManager;
...
@@ -6,11 +6,19 @@ import java.sql.DriverManager;
import
java.sql.PreparedStatement
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.SQLException
;
import
java.util.Objects
;
import
javax.swing.JOptionPane
;
import
javax.swing.JOptionPane
;
/* */
/* Ta wersja dokonuje filtrowania po stronie bazy danych (WHERE), co jest dobre,
* ale dane wprowadzone przez uzytkownika dokleja bezpośrednio do treści zapytania SQL,
* co daje możliwość wpisania dowolnego kodu SQL, który wykona baza danych.
* To się nazywa "SQL injection", poważny błąd bezpieczeństwa aplikacji.
*
* Przykłady inputów, które prowadziły do problemów:
* - IT_PROG'; UPDATE employees SET salary = 30000 WHERE last_name = 'Austin
* - '; UPDATE employees SET salary = 1; SELECT '
* - '; DROP TABLE employees CASCADE; SELECT '
*/
public
class
OdczytajWybranych_v2_Where
{
public
class
OdczytajWybranych_v2_Where
{
...
@@ -19,9 +27,11 @@ public class OdczytajWybranych_v2_Where {
...
@@ -19,9 +27,11 @@ public class OdczytajWybranych_v2_Where {
// TODO wypisz tych pracowników, którzy mają taki job_id
// TODO wypisz tych pracowników, którzy mają taki job_id
try
(
Connection
c
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5432/hr"
,
"kurs"
,
"abc123"
);
try
(
Connection
c
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5432/hr"
,
"kurs"
,
"abc123"
);
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees WHERE job_id = '"
+
szukanyJob
+
"'"
);
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees WHERE job_id = '"
+
szukanyJob
+
"'"
))
{
ResultSet
rs
=
stmt
.
executeQuery
())
{
System
.
out
.
println
(
"Za chwilę wykonam: "
+
stmt
+
"\n"
);
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
"employee_id"
);
int
id
=
rs
.
getInt
(
"employee_id"
);
String
firstName
=
rs
.
getString
(
"first_name"
);
String
firstName
=
rs
.
getString
(
"first_name"
);
...
@@ -30,6 +40,7 @@ public class OdczytajWybranych_v2_Where {
...
@@ -30,6 +40,7 @@ public class OdczytajWybranych_v2_Where {
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
System
.
out
.
println
(
"Pracownik nr "
+
id
+
": "
+
firstName
+
" "
+
lastName
+
" ("
+
jobId
+
") zarabia "
+
salary
);
System
.
out
.
println
(
"Pracownik nr "
+
id
+
": "
+
firstName
+
" "
+
lastName
+
" ("
+
jobId
+
") zarabia "
+
salary
);
}
}
}
}
catch
(
SQLException
e
)
{
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
...
PC24-BazyDanych/src/main/java/zajecia/postgresql/OdczytajWybranych_v3_Parametry.java
0 → 100644
View file @
29574c42
package
zajecia
.
postgresql
;
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
javax.swing.JOptionPane
;
/* Ta wersja dokonuje filtrowania po stronie bazy danych (WHERE)
* a parametr do zapytania przekazuje we właściwy sposób, za pomocą ? i setString
* Ta wersja jest poprawna: wydajna i bezpieczna.
*/
public
class
OdczytajWybranych_v3_Parametry
{
public
static
void
main
(
String
[]
args
)
{
String
szukanyJob
=
JOptionPane
.
showInputDialog
(
"Podaj kod stanowiska, np. IT_PROG"
);
// TODO wypisz tych pracowników, którzy mają taki job_id
try
(
Connection
c
=
DriverManager
.
getConnection
(
"jdbc:postgresql://localhost:5432/hr"
,
"kurs"
,
"abc123"
);
PreparedStatement
stmt
=
c
.
prepareStatement
(
"SELECT * FROM employees WHERE job_id = ?"
))
{
/* W treści zapytania miejsca na parametry oznaczamy znakami ?
* a następnie na obiekcie PreparedStatement ustawiamy wartości parametrów
* za pomocą setString, setInt itd.
* Numer parametru to numer znaku zapytania liczony od 1.
*/
stmt
.
setString
(
1
,
szukanyJob
);
System
.
out
.
println
(
"Za chwilę wykonam: "
+
stmt
+
"\n"
);
try
(
ResultSet
rs
=
stmt
.
executeQuery
())
{
while
(
rs
.
next
())
{
int
id
=
rs
.
getInt
(
"employee_id"
);
String
firstName
=
rs
.
getString
(
"first_name"
);
String
lastName
=
rs
.
getString
(
"last_name"
);
String
jobId
=
rs
.
getString
(
"job_id"
);
BigDecimal
salary
=
rs
.
getBigDecimal
(
"salary"
);
System
.
out
.
println
(
"Pracownik nr "
+
id
+
": "
+
firstName
+
" "
+
lastName
+
" ("
+
jobId
+
") zarabia "
+
salary
);
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
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