特定の文字を含むかチェックする方法を説明します。
特定の文字列が含まれるかチェックするにはInStrかInStrRevを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <html> <head> <title></title> </head> <body> <% Dim data data = Request.Form("data") Dim checkData checkData = "サンプル" If InStr(data,checkData) > 0 Then Response.Write data & "に" & checkData & "は含まれています" Else Response.Write data & "に" & checkData & "は含まれています" End If If InStrRev(data,checkData) > 0 Then Response.Write data & "に" & checkData & "は含まれています" Else Response.Write data & "に" & checkData & "は含まれています" End If %> <form action="" method="post"> <input type="text" name="data"> <input type="submit"> </form> </body> </html> |
提供されたASPのソースコードを確認しました。以下はいくつかの誤りと改善点です:
1.
メッセージが間違っています:
If InStr(data,checkData) > 0 ThenとIf InStrRev(data,checkData) > 0 Thenの条件分岐において、含まれている場合と含まれていない場合で同じメッセージが表示されています。片方の条件分岐のメッセージを修正してください。
2.フォームから送信されたデータのエスケープ:
フォームから送信されたデータを表示する際に、エスケープ処理を行わないと、悪意のあるコードが実行される可能性があります。セキュリティ上の理由から、HTML出力の際にはServer.HtmlEncodeを使ってデータをエスケープしましょう。
修正されたコードは以下のようになります:
0 Then
Response.Write Server.HtmlEncode(data) & “に” & checkData & “は含まれています”
Else
Response.Write Server.HtmlEncode(data) & “に” & checkData & “は含まれていません”
End If
If InStrRev(data, checkData) > 0 Then
Response.Write Server.HtmlEncode(data) & “に” & checkData & “は含まれています”
Else
Response.Write Server.HtmlEncode(data) & “に” & checkData & “は含まれていません”
End If
%>
上記の修正により、データの表示がエスケープされ、セキュリティが向上します。
また、メッセージも適切に表示されるようになります。
ただし、このコードはまだ完全に安全とは言えません。
実際の運用においては、さらなるセキュリティ対策が必要になる場合があります。