web-dev-qa-db-ja.com

名前の入力の無害化

私は自分のWebアプリのオンボーディングに取り組んでおり、名前や会社名などのデータフィールドに対するユーザー入力を無害化する方法を考えています。最初は文字と数字のみに入力を制限しましたが、引用符付きのO'Malley、アクセント付きのévoù、およびハイフン付きのKLA-Tencoreでは機能しないことに気付きました。サニタイズされたユーザーデータの入力にはどのような制限がありますか?

ありがとう。

1
frenchie

一部のユーザーが実際の名前を入力できないようにする方法の使用には注意してください。名前は非常に個人的であり、「あなたの本当の名前を使用することはできません」と言われても、誰とでも仲良くなることはありません。ハイフン付きの名前を使用できないことに気が動転した顧客に少なくとも月に1回は対処したことを覚えています(これはめったにアクセスされないシステムで、パスワードが姓に指定されていました。私のものではなく、質問しないでください)。 。どうして使えないのか分からず、説明も気に入らなかった。 「本名を使用する」ように言われたアイルランドのユーザーとのFacebookの発言 のように、これに関してかなり注目を集める反発がありました。

PixelSnaderは正解です。答えはユーザーが入力する内容によって異なります。あなたの技術はその方程式の反対側です。たとえば、 PHPは明らかに「奇妙な文字」を含むファイル名を好まない です。

しかし、私の意見では、できる限り特殊文字を収容できるようにあらゆる努力をする必要があります。特殊文字をサニタイズする必要がある場合は、ユーザーに対してそれを透過的にするためにあらゆる努力をする必要があります。

方法論に関しては、Facebookの許容範囲を考えると、彼らがどのようにしているかを知りたいのですが、特定のフィールドの1つの潜在的なオプションは、入力をエンコードし、必要に応じてデコードすることです。 OWASPにはデータ検証戦略に関するいくつかの提案があります Base64エンコードを含みます。

3
Sgiobair

ユーザー入力のサニタイズは、入力を変更または制限することを意味するのではなく、単に入力を安全に処理し、XSS攻撃などの悪用を防ぐために必要なときにエスケープすることを意味します。データをデータベースに保存する場合は、パラメーター化されたクエリを使用します。特定のデータベースがそれらを直接サポートしていない場合でも、多くの場合、多くのライブラリーがそれらに単純なラッパーを追加して、基本的に同じことを実行できるようにします。 HTMLページに出力する場合は、HTMLなどにエスケープします。

tl; drユーザーのデータを変更しないでください。安全に使用してください。

1
michael

名前などのデータフィールドのユーザー入力をサニタイズする方法

どちらか

  • しないでください。 SQLインジェクションが心配な場合は、代わりにパラメータ化されたクエリを使用してください。

  • 適切なUnicode文字クラスを使用します。たとえば Java regex for support Unicode? を参照してください:\p{L}+

0
RedGrittyBrick