限制文本输入,以便在 html 页面中使用 Web API 时排除 html 或脚本
Constrain text input so it excludes html or script when using Web API in html page
一个 html 页面有一个输入员工姓名的文本框,另一个输入员工年龄的文本框和一个保存按钮,单击该按钮会调用 SaveEmployeeData
的 Web API 方法保存数据。 Web API 托管在 asp.net 网站中,其所有方法均使用 C# 编写。
问题
在这种情况下,我如何限制最终用户不在员工姓名和员工年龄文本框中输入任何 html 或脚本?我正在寻找一些可以在下面的代码中应用于这些属性的属性。即使他们确实输入了这样的文本,Web API 也应该以验证错误作为响应。
//Web API method below
public HttpResponseMessage SaveEmployeeData(EmployeeDetails ed)
{
//code omitted
}
//Type of parameter passed to above Web API method
public class EmployeeDetails
{
[Required]
[StringLength(1000,MinimumLength=10)]
public string FullName { get; set; }
public int Age { get; set; }
}
更新 1
我尝试了 samir 建议的正则表达式,但它似乎不允许简单的字母输入,如下面的屏幕截图所示。此在线正则表达式测试器的 url 是:http://regex.cryer.info/。因此,认为在这种情况下需要为 Employee Name 值使用另一个正则表达式。
更新 2
我能够使用 samir 建议的正则表达式来工作。
我为允许字母(任何语言)、数字、单撇号、句号和破折号而进行的代码更改如下所示。是我在Full Name
属性上应用的正则表达式属性,确保在调用SaveEmployeeData
[=]的webapi方法时没有提交html或脚本20=]
//Type of parameter passed to above Web API method
public class EmployeeDetails
{
[Required]
[StringLength(1000,MinimumLength=10)]
[RegularExpression(@"(^[\p{L} .'-(0-9)]+$)", ErrorMessage = "HTML or Script not allowed")]
public string FullName { get; set; }
public int Age { get; set; }
}
我会推荐一些功能强大的东西,如 response 中的特色。
用户键入恶意代码的可能性并不比有人直接向您的 api 发布恶意输入的可能性大。是的,清理和控制用户输入的内容,还要清理发送到您的 api 的内容,然后还要清理和验证您的 api 收到的内容。
有多种方法可以限制 html 文本框中允许的字符。检查 here, and here。
我对 API 方面的了解较少。我建议您继续研究,或者希望其他人可以对此进行扩展。
您可以在客户端/服务器端使用正则表达式。
以下正则表达式将验证员工姓名:
"^[\p{L} .'-]+$"
其中,
\p{L}
匹配来自任何语言的任何类型的字母
.'-
允许在员工姓名中使用 space、点、单引号和连字符。
例如
弗朗西斯科·德索萨
埃里克
安德烈
对于年龄,您可以使用以下正则表达式:
"^(0?[1-9]|[1-9][0-9])$"
PHP
中的示例
<?php
$name = "Francisco D'Souza";
if (!preg_match("/^[\p{L} .'-]+$/",$name)) {
echo "INVALID";
}
else
{
echo "VALID";
}
?>
OUTPUT
VALID // Francisco D'Souza
INVALID // <html>
一个 html 页面有一个输入员工姓名的文本框,另一个输入员工年龄的文本框和一个保存按钮,单击该按钮会调用 SaveEmployeeData
的 Web API 方法保存数据。 Web API 托管在 asp.net 网站中,其所有方法均使用 C# 编写。
问题
在这种情况下,我如何限制最终用户不在员工姓名和员工年龄文本框中输入任何 html 或脚本?我正在寻找一些可以在下面的代码中应用于这些属性的属性。即使他们确实输入了这样的文本,Web API 也应该以验证错误作为响应。
//Web API method below
public HttpResponseMessage SaveEmployeeData(EmployeeDetails ed)
{
//code omitted
}
//Type of parameter passed to above Web API method
public class EmployeeDetails
{
[Required]
[StringLength(1000,MinimumLength=10)]
public string FullName { get; set; }
public int Age { get; set; }
}
更新 1
我尝试了 samir 建议的正则表达式,但它似乎不允许简单的字母输入,如下面的屏幕截图所示。此在线正则表达式测试器的 url 是:http://regex.cryer.info/。因此,认为在这种情况下需要为 Employee Name 值使用另一个正则表达式。
更新 2
我能够使用 samir 建议的正则表达式来工作。
我为允许字母(任何语言)、数字、单撇号、句号和破折号而进行的代码更改如下所示。是我在Full Name
属性上应用的正则表达式属性,确保在调用SaveEmployeeData
[=]的webapi方法时没有提交html或脚本20=]
//Type of parameter passed to above Web API method
public class EmployeeDetails
{
[Required]
[StringLength(1000,MinimumLength=10)]
[RegularExpression(@"(^[\p{L} .'-(0-9)]+$)", ErrorMessage = "HTML or Script not allowed")]
public string FullName { get; set; }
public int Age { get; set; }
}
我会推荐一些功能强大的东西,如 response 中的特色。
用户键入恶意代码的可能性并不比有人直接向您的 api 发布恶意输入的可能性大。是的,清理和控制用户输入的内容,还要清理发送到您的 api 的内容,然后还要清理和验证您的 api 收到的内容。
有多种方法可以限制 html 文本框中允许的字符。检查 here, and here。
我对 API 方面的了解较少。我建议您继续研究,或者希望其他人可以对此进行扩展。
您可以在客户端/服务器端使用正则表达式。
以下正则表达式将验证员工姓名:
"^[\p{L} .'-]+$"
其中,
\p{L}
匹配来自任何语言的任何类型的字母
.'-
允许在员工姓名中使用 space、点、单引号和连字符。
例如
弗朗西斯科·德索萨
埃里克
安德烈
对于年龄,您可以使用以下正则表达式:
"^(0?[1-9]|[1-9][0-9])$"
PHP
中的示例<?php
$name = "Francisco D'Souza";
if (!preg_match("/^[\p{L} .'-]+$/",$name)) {
echo "INVALID";
}
else
{
echo "VALID";
}
?>
OUTPUT
VALID // Francisco D'Souza
INVALID //
<html>