Разработка безопасного программного обеспечения
РБПО
МИРЭА
MIREA
Оценка кода
код ревью
code review
author: @0x41
reviewed: 2020-10-20
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SQLInjections
{
public partial class Form1 : Form
{
private string dbFileName = "DBSqlLite";
private string dbTableName = "TestTable";
private SQLiteConnection m_dbConn;
private SQLiteCommand m_sqlCmd;
public Form1()
{
InitializeComponent();
m_dbConn = new SQLiteConnection();
m_sqlCmd = new SQLiteCommand();
dbFileName = "DBSqlLite";
OpenDB();
CreateDBAndTable();
}
/// Проблема: Беспарольное (незащищенное) подключение к БД
///
/// CWE: 862, 952
///
/// Источники: https://stackoverrun.com/ru/q/259901
/// https://github.com/PositiveTechnologies/PT.Doc/blob/master/CWE-List/CWE-List.md
///
/// Предлагаемое исправление: установить пароль методом conn.SetPassword($"{пароль}")
private void OpenDB()
{
if (!File.Exists(dbFileName))
SQLiteConnection.CreateFile(dbFileName);
try
{
m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;");
m_dbConn.Open();
m_sqlCmd.Connection = m_dbConn;
}
catch (SQLiteException ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
private void CreateDBAndTable()
{
try
{
m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS "+ dbTableName + " (id INTEGER PRIMARY KEY AUTOINCREMENT, FirstName TEXT, SecondName TEXT, LastName TEXT)";
m_sqlCmd.ExecuteNonQuery();
}
catch (SQLiteException ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
private void DropTable()
{
try
{
m_sqlCmd.CommandText = "DELETE from " + dbTableName;
m_sqlCmd.ExecuteNonQuery();
}
catch (SQLiteException ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
private void AddData()
{
Random rand = new Random();
string word = "";
int n = 3;
for (int i = 0; i < n; i++)
{
word = Guid.NewGuid().ToString();
m_sqlCmd.CommandText = "INSERT INTO "+ dbTableName + " ('FirstName', 'SecondName','LastName') values ('"
+ word.Substring(0, rand.Next(1, 15)) + "' , '"
+ word.Substring(0, rand.Next(1, 15)) + "' , '"
+ word.Substring(0, rand.Next(1, 15)) + "')";
m_sqlCmd.ExecuteNonQuery();
}
}
/// Проблема: Невалидированный ввод, при вводе в текстовое поле слова "id",
///
/// Будет составлен запрос "Select * from TestTable where id=id",
/// Который вернет все записи в таблице
///
/// CWE : 253
///
/// Источники: https://rzelenov.livejournal.com/481.html
/// https://github.com/PositiveTechnologies/PT.Doc/blob/master/CWE-List/CWE-List.md
///
/// Предлагаемое исправление:
/// if (!System.Text.RegularExpressions.Regex.IsMatch(textBoxId.Text, @"^\d+$"))
/// {
/// MessageBox.Show($"Error: {textBoxId.Text} is not valid id value.");
/// return;
/// }
private void GetData()
{
DataTable dTable = new DataTable();
String sqlQuery;
sqlQuery = "Select * from " + dbTableName + " where id= " + textBoxId.Text;
try
{
SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, m_dbConn);
adapter.Fill(dTable);
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
for (int i = 0; i < dTable.Columns.Count; i++)
dataGridView1.Columns.Add(i.ToString(), i.ToString());
for (int i = 0; i < dTable.Rows.Count; i++)
dataGridView1.Rows.Add(dTable.Rows[i].ItemArray);
}
catch (SQLiteException ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
GetData();
}
private void button2_Click(object sender, EventArgs e)
{
AddData();
}
private void button3_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
}
private void button4_Click(object sender, EventArgs e)
{
DropTable();
}
}
}
@author: Latypova Olgareviewed: 2020-09-24группы: БСБО-05-19https://hackmd.io/@0x41/OS_Lab_2
Sep 27, 2024@author: Latypova Olgareviewed: 2020-02-11группы: БББО-09-19
Sep 14, 2024Домашнее задание: Необходимо развернуть окружение с веб-сайтом с использованием базы данных, настроить постоянное хранение и создать сетевое окружение. Проверить получившийся контейнер и образ на безопасность. В отчете привести скриншоты и описать последовательность действий. Разобрать вывод сканеров безопасности и предложить меры по их исправлению. Утилиты для проверки docker-контейнера https://github.com/aquasecurity/trivy https://github.com/docker/docker-bench-security https://docs.docker.com/engine/scan/ (Возможны проблемы, в связи с миграцией на scout) Share for dojo and Ubuntu Virtual Image - \\10.114.6.6\shared
Apr 11, 2023author: @0x41reviewed: 2020-10-06
Nov 29, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up