Javascript 停止使用AngularJS在表单中发布html标记
我有一个表单,我希望用户不能输入html标记或脚本并以angularjs提交表单。 为此,我使用了Javascript 停止使用AngularJS在表单中发布html标记,javascript,jquery,html,angularjs,forms,Javascript,Jquery,Html,Angularjs,Forms,我有一个表单,我希望用户不能输入html标记或脚本并以angularjs提交表单。 为此,我使用了$sanitize,但它不起作用 这是我的表格 <html> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script> <script src="//ajax.googleapis.com/ajax
$sanitize
,但它不起作用
这是我的表格
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular-sanitize.js"></script>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body ng-app="birthdayToDo" ng-controller="main">
<h1>Hello Plunker!</h1>
<form name="testForm" ng-submit="submitForm(testForm.$valid)" novalidate>
<input type="text" name="name" ng-model="testText"/>
<p ng-show="testForm.name.$dirty && testForm.name.$invalid && testForm.submitted" class="error">
Invalid Input
</p>
<input type="submit" value="Save"/>
</form>
</body>
</html>
我认为你走错了方向。在angularjs和后端中使用白名单正则表达式来验证输入 为了安全起见,最佳做法是每个字段都有一个只允许某些有效输入的正则表达式。一个简单的名称是
/^[A-z,.-]+$/i
。这将在服务器端防止发送任何无效数据。这也可以放在客户端进行验证
默认情况下,Angularjs在使用{{}
防止XSS攻击时对输出进行编码,因此abs
将按原样显示,从安全角度来看,这是您希望防止第三方脚本在页面上执行的内容
在某些情况下,您可能希望允许html输出并安全地允许它,但在这种情况下,您可以将
ng bind html
与ng sanitize
一起使用,而不需要直接使用$sce
你想要什么?是否要阻止用户输入html标记?为什么?@WayneEllery:是的。我不希望用户输入html标记或脚本。比如,如果他想输入..一些js代码,那么表单应该是无效的。我也被限制使用正则表达式。这样做的原因是什么?因为如果他在“名称”字段中输入一些脚本,那么在显示名称列表时,它将显示脚本而不是有效名称。最佳做法是使用白名单。这是一个正则表达式,它将说明哪些字符是允许的,而不是一个黑名单,其中说明哪些字符/字符串是不允许的。你应该使用白名单
$scope.SanitizeDemo=function() {
return $sce.trustAsHtml($scope.testText);
};