c# windowsform, каков следующий шаг перед развертыванием? - PullRequest
0 голосов
/ 30 апреля 2020

Только что закончил свою программу Winforms для Клиник с базой данных в sql Управляющая Студия. Мое соединение ADO. NET Модель данных сущностей Я имею в виду edmx. Я хочу спросить вас, ребята, каков следующий шаг и спросить вас, если вы видите какие-либо проблемы с инъекцией и как я должен защитить от инъекций. Весь мой код - Linq, и я верю, что с Linq у вас меньше проблем с инъекциями. Мои вопросы состоят из трех вопросов:

1) Какие изменения я должен внести в настройки в моем проекте Visual перед развертыванием alaive на реальном сервере. Есть ли какие-либо изменения в Правильности моего проекта winforms? Теперь это будет производственный проект.

2) Мой второй вопрос: видите ли вы, ребята, отсутствие безопасности в моем коде, когда я добавляю нового человека или когда я ищу человека? И как я должен делать ради безопасности? См. Мой код ниже, пожалуйста

3) Является ли (ADO. NET Entity Data Model, ADO. NET Entity Data Model) нормальной для использования в такой большой системе? потому что моя строка подключения находится в App.config, и это очень длинная строка, подобная этой ниже, и она немного напугана ...;)

<add name="ClinicEntities" connectionString="metadata=res://*/MyHealthModel.csdl|res://*/MyHealthModel.ssdl|res://*/MyHealthModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyComputerName;initial catalog=ClinicDb;user id=***;password=*****;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings>

Вот мой код: При поиске человека:

private void SearchPatient()
{
try
            {
                using (ClinicEntities db = new ClinicEntities())
                {
                    if(txtIdCardnr.Text != string.Empty)
                    {
                        string IdCard = txtIdCardnr.Text.Trim();
                        var patId = db.Patient.Where(x => x.IdentityCardNr == IdCard).FirstOrDefault();
                        if(patId != null)
                        {
                            var reservation = (from u in db.Registration
                                            join p in db.Patient on u.PatientId equals p.PatientId
                                            join ....... you got the idea 
                                            where ......  
                                            select new
                                            {
                                                ReservationNr = u.ReservNr,
                                                ReservationDate = u.ReservationDate,
                                                ........
                                            }

                                  ).ToList();

                            dgvReservations.DataSource =  reservation;

                        }


                    }

                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Exception inner = ex.InnerException;
                while (inner != null)
                {
                    MessageBox.Show(inner.Message);
                    inner = inner.InnerException;
                }
            }
}

И для добавления новой брони:

private async void AddReservation()
        {
            try
            {
                using (ClinicEntities db = new ClinicEntities())
                {
                    if (IsValidated())
                    { 
                        Reservation pat = new Reservation();
                        pat.SymptomId = Convert.ToInt32(cmbSymptom.SelectedValue);
                        pat.SymptonDate = Convert.ToDateTime(dateTimePicker1.Value.Date);
                        pat.SymptonTime = txtTime.Text.Trim();
                        pat.Notes = txtNoteEmg.Text.Trim();
                        pat.RegisterdBy = StaffId;
                        pat.PatientId = PatientId;  
                        db.Reservation.Add(pat);
                        await db.SaveChangesAsync();


                    }

                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Exception inner = ex.InnerException;
                while (inner != null)
                {
                    MessageBox.Show(inner.Message);
                    inner = inner.InnerException;
                }
            }
        }

Итак, вы видите, ребята, отсутствие безопасности в моем коде? Еще раз спасибо за помощь в ответе на все три вопроса.

1 Ответ

0 голосов
/ 01 мая 2020

StackOverflow не место для проверки кода (но есть сайт обмена стеками для проверки кода, и ваш вопрос может быть на topi c там)

1) Я не совсем уверен, как сервер входит в это уравнение; Конечно, он предлагает только это приложение Winforms для загрузки, как и любой другой файл. Никаких изменений не требуется

2) Я вижу незашифрованный простой текстовый пароль в вашем конфигурационном файле, но волнует вас или нет, это другое дело Может случиться так, что даже если пользователь действительно откроет локальную базу данных с помощью найденного пароля и осмотрится, он не сможет причинить реального вреда. Теперь, если этот пароль совпадает с вашим рабочим сервером, это может быть больше проблемой ... LINQ, который вы написали для доступа к БД, защищен от SQL инъекции. Единственный способ сделать его ответственным - это выполнить команду raw sql, в которую были включены значения, предоставленные пользователем,

3) Я не уверен, что StackOverflow - место, где можно обратиться за помощью при фобии длинного соединения строки. Оно работает; оставьте это в покое (возможно, кроме шифрования пароля)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...