Как запросить источник данных VB.NET - PullRequest
0 голосов
/ 20 сентября 2011

Я добавил Datasoruce в свой текущий проект, и в мой файл App.config было добавлено следующее:

<connectionStrings>
        <add name="WindowsApplication1.My.MySettings.dbConnectionString"
            connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb"
            providerName="System.Data.OleDb" />
    </connectionStrings>

Как теперь можно запрашивать и обновлять этот источник данных?

У меня есть следующий запрос:

Dim sqlstr As String = "INSERT INTO Accounts(Username,Password)VALUES('" & Trim(Account(0)) & "','" & Trim(Account(1)) & "')"

Но я не слишком уверен, как на самом деле выполнить запрос (новичок в VB, используется для PHP и один файл подключения к базе данных!)

1 Ответ

4 голосов
/ 20 сентября 2011

Как теперь я могу запрашивать и обновлять этот источник данных?

НЕ как вы это делаете прямо сейчас!

У вас две огромные проблемы с этим кодом:

  1. НИКОГДА не используйте конкатенацию строк для вставки значений в SQL-оператор, подобный этому.
  2. НИКОГДА не храните пароль в виде обычного текста в базе данных.

Бывают НУЛЕВЫЕ случаи, когда любой из них является приемлемым.

Вот один из возможных вариантов:

Dim sql As String = "INSERT INTO Account (UserName, PasswordHash) VALUES ( ? , ? )"
Using cn As New OleDbConnection(ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString), _
      cmd As New OleDbCommand(sql, cn)

    cmd.Parameters.Add("UserName", OleDbType.VarChar, 50).Value = Account(0).ToString().Trim()
    cmd.Parameters.Add("PasswordHash", OleDbType.Char, 20).Value = HashPassword(Account(1).ToString().Trim())

    cn.Open()
    cmd.ExecuteNonQuery()
End Using

Обратите внимание, что я изменил имя одного из ваших столбцов и сослался на функцию HashPassword (), которая еще не существует. Вам нужно будет создать свою собственную функцию HashPassword () для работы с этим кодом. При создании функции ищите функцию scrypt или bcrypt для использования. Не используйте MD5. Лучшее, что есть в .Net - это SHA1. Если вы действительно должны пойти по этому пути (SHA1), вы можете, но scrypt или bcrypt очень предпочтительны (вот почему я не предоставляю вам функцию: она будет полагаться на другой код, который вы должны сначала получить из Интернета).

Когда вы идете для аутентификации пользователя, вы должны затем использовать ту же функцию для хеширования попыток ввода пароля и сравнения хешей, а не исходных паролей. Это единственный безопасный способ сделать это.

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