0

オンラインで、主にデスクトップや携帯電話のアプリケーションからアクセスする MYSQL データベースを使用したいと考えています。誰かに私のコードをざっと見てもらい、セキュリティに関して何を変更/改善する必要があるか教えてもらいたいです。基本的に、コードを改善できますか、それとも変更する必要がありますか?

これが私のコードです:

Create Database db_person_cdtest;

USE [db_person_cdtest]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Person](
[PersonID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[ID] [varchar](20),
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[AddressLine1] [varchar](50),
[AddressLine2] [varchar](50),
[AddressLine3] [varchar](50),
[MobilePhone] [varchar](20),
[HomePhone] [varchar](20),
[Description] [varchar](10),
[DateModified] [datetime],
[PersonCategory] [varchar](30) NOT NULL,
[Comment] [varchar](max),
 CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
[PersonID] DESC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY];

CREATE PROCEDURE usp_InsertPerson
(
@ID VARCHAR(20),
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@AddressLine1 VARCHAR(50),
@AddressLine2 VARCHAR(50),
@AddressLine3 VARCHAR(50),
@MobilePhone VARCHAR(20),
@HomePhone VARCHAR(20),
@Description VARCHAR(10),
@Comment VARCHAR(max)
)

AS

BEGIN
Declare @PersonCategory VARCHAR(30)
SET @PersonCategory = dbo.usp_PersonCategoryLookup(@ID, @Description)
INSERT INTO Person(ID, FirstName, LastName, AddressLine1, AddressLine2, AddressLine3, MobilePhone, HomePhone, Description, DateModified, PersonCategory, Comment)
VALUES (@ID, @FirstName, @LastName, @AddressLine1, @AddressLine2, @AddressLine3, @MobilePhone, @HomePhone, @Description, GETDATE (), @PersonCategory, @Comment)
END

CREATE PROCEDURE usp_UpdatePerson
(
@PersonID numeric(18, 0),
@ID VARCHAR(20),
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@AddressLine1 VARCHAR(50),
@AddressLine2 VARCHAR(50),
@AddressLine3 VARCHAR(50),
@MobilePhone VARCHAR(20),
@HomePhone VARCHAR(20),
@Description VARCHAR(10),
@Comment VARCHAR(max)
)

AS

BEGIN
    Declare @PersonCategory VARCHAR(30)
SET @PersonCategory = dbo.usp_PersonCategoryLookup(@ID, @Description)
Update Person set ID=@ID, FirstName=@FirstName, LastName=@LastName, AddressLine1=@AddressLine1, AddressLine2=@AddressLine2, AddressLine3=@AddressLine3, MobilePhone=@MobilePhone, HomePhone=@HomePhone, Description=@Description, DateModified=GETDATE (), PersonCategory=@PersonCategory, Comment=@Comment where PersonID=@PersonID
END

CREATE PROCEDURE usp_SearchPerson
(
@SearchCriteria VARCHAR(50)
)

AS

BEGIN
Select * from Person where FirstName like @SearchCriteria or LastName like @SearchCriteria or PersonCategory like @SearchCriteria
END

CREATE PROCEDURE usp_SelectPerson
(
@PersonID numeric(18, 0)
)

AS

BEGIN
select * from Person where PersonID=@PersonID
END

CREATE FUNCTION usp_PersonCategoryLookup
(
@ID VARCHAR(20),
@Description VARCHAR(10)
)
RETURNS VARCHAR(30)
AS

BEGIN
    return @ID + @Description
END
4

2 に答える 2

0

次の列を person テーブルに追加できます。

  • CreatedByUser (varchar または int)
  • CreatedDateTime (日時)
  • LastUpdateByUser (varchar または int)
  • LastUpdateDateTime (日時)

これは、このようにして、監査目的で、レコードを作成したユーザーと最後にレコードを更新したユーザーが誰であるかを確認できるためです。

また、これはセキュリティには関係ありませんが、select ステートメントでアスタリスク (*) を使用しないでください。返される列名を配置します。これにより、将来的に多くの頭痛が解消されます。

于 2013-08-22T12:54:32.290 に答える
0

このアプリケーションを配布する予定がある場合は、.net アプリケーションを簡単に逆コンパイルしてソース コードを表示できることに注意してください。これにより、ユーザーがデータベース接続情報を取得し、データベース全体へのアクセスを許可する可能性が生じます。このプロジェクト内で使用されているユーザー アカウントを適切にロックダウンするために、少し調査することをお勧めします。

また、接続情報を暗号化し、実行時に復号化するように言う人は無視してください。コード内に実行時に復号化するメソッドがある場合、アプリケーションを逆コンパイルする人は誰でもこれらのメソッドを持っていることになります。コードの難読化も別の選択肢ですが、プロセスを遅くするだけで、防止することはできません。

于 2013-08-22T12:55:27.757 に答える