前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >angularjs 表单验证

angularjs 表单验证

作者头像
柴小智
发布于 2018-04-10 09:37:02
发布于 2018-04-10 09:37:02
6.8K00
代码可运行
举报
文章被收录于专栏:菜鸟计划菜鸟计划
运行总次数:0
代码可运行
一、常用的表单验证指令 

1. 必填项验证

某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" required />  

2. 最小长度

验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}":

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" ng-minlength="5" /> 

3. 最大长度

验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用指令ng-maxlength="{number}":

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" ng-maxlength="20" />

4. 模式匹配

使用ng-pattern="/PATTERN/"来确保输入能够匹配指定的正则表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" ng-pattern="/[a-zA-Z]/" /> 

5. 电子邮件

验证输入内容是否是电子邮件,只要像下面这样将input的类型设置为email即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="email" name="email" ng-model="user.email" /> 

6. 数字

验证输入内容是否是数字,将input的类型设置为number:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="number" name="age" ng-model="user.age" /> 

7. URL

 验证输入内容是否是URL,将input的类型设置为 url:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="url" name="homepage" ng-model="user.facebook_url" />

 下面我们将这些表单验证放到具体的实现中来测试一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="col-md-6">
        <form role="form" class="form-horizontal">
            <div class="form-group">
                <div class="col-md-4">
                    <label for="name">1.必填项</label>
                </div>
                <div class="col-md-8">
                    <input class="form-control" id="name" type="text" required ng-model='user.name' />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-4">
                    <label for="minlength">2.最小长度=5</label>
                </div>
                <div class="col-md-8">
                    <input type="text" id="minlength" ng-minlength="5" ng-model="user.minlength" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-4">
                    <label for="minlength">3.最大长度=20</label>
          </div>
                <div class="col-md-8">
                    <input type="text" ng-model="user.maxlength" ng-maxlength="20" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-4">
                    <label for="minlength">4. 模式匹配</label>
               </div>
                <div class="col-md-8">
                 <input type="text" id="minlength" ng-model="user.pattern" ng-pattern="/^[a-zA-Z]*\d$/" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-4">
                    <label for="email">5. 电子邮件</label>
          </div>
                <div class="col-md-8">
                    <input type="email" id="email" name="email" ng-model="user.email" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-4">
                    <label for="age">6. 数字</label>
          </div>
                <div class="col-md-8">
                    <input type="number" id="age" name="age" ng-model="user.age" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-4">
                    <label for="url"> 7. URL</label>
          </div>
                <div class="col-md-8">
                    <input type="url" id="url" name="homepage" ng-model="user.url" class="form-control" />
                </div>
            </div>
            <div class="form-group text-center">
                <input class="btn btn-primary btn-lg" type="submit" value="提交" />
            </div>
        </form>       
    </div>
    <div class="col-md-12">
        1.必填项:{{user.name}}<br>
        2.最小长度=5:{{user.minlength}}<br>
        3.最大长度=20:{{user.maxlength}}<br>
        4.模式匹配:{{user.pattern}}<br>
        5.电子邮件:{{user.email}}<br>
        6.数字:{{user.age}}<br>
        7.URL:{{user.url}}<br>
    </div>

在测试中我们发现,只有当表达式满足验证,才会实时进行双向绑定。同时我们也发现,效果图如下:

 二、表单中控制变量

屏蔽浏览器对表单的默认验证行为

在表单元素上添加novalidate标记即可,问题是我们怎么知道我们的表单有哪些字段是有效的,那些事非法或者无效的?ng对此也提供了非常棒的解决方案,表单的属性可以在其所属的$scope对象中访问到,而我们又可以访问$scope对象,因此JavaScript可以间接地访问DOM中的表单属性。借助这些属性,我们可以对表单做出实时响应。 可以使用formName.inputFieldName.property的格式访问这些属性。

修改的表单

布尔型属性,当且仅当用户实际已经修改的表单。不管表单是否通过验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
formName.inputFieldName.$dirty

未修改过的表单

布尔值属性,表示用户是否修改了表单。如果为ture,表示没有修改过;false表示修改过:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
formName.inputFieldName.$pristine;

经过验证的表单

布尔型属性,它指示表单是否通过验证。如果表单当前通过验证,他将为true:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
formName.inputFieldName.$valid

未通过验证的表单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
formName.inputFieldName.$invalid

最后两个属性在用于DOM元素的显示或隐藏时是特别有用的。同时,如果要设置特定的class时,他们也非常有用的。

错误

这是AngularJS提供的另外一个非常有用的属性:$error对象。它包含当前表单的所有验证内容,以及它们是否合法的信息。用下面的语法访问这个属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
formName.inputfieldName.$error

如果验证失败,这个属性的值为true;如果值为false,说明输入字段的值通过了验证。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>

<html ng-app="myTest">
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" />
        <script src="~/Javascript/angular.min.js"> </script>
        <style type="text/css">
            body { padding-top: 30px; }
        </style>
    </head>
    <body  ng-Controller="MyController">
        <div class="col-md-6">
            <form role="form" name="myForm" ng-submit="submitForm(myForm.$valid)" class="form-horizontal" novalidate>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="name">1.必填项</label>
                    </div>
                    <div class="col-md-8">
                        <input class="form-control" id="name" name="name" type="text" required ng-model='user.name' />
                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.name.$dirty && myForm.name.$valid"></span>
                    </div>
                </div>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="minlength">2.最小长度=5</label>
                    </div>
                    <div class="col-md-8">
                        <input type="text" id="minlength" name="minlength" ng-minlength="5" ng-model="user.minlength" class="form-control" />
                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.minlength.$dirty && myForm.minlength.$valid"></span>
                    </div>
                </div>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="maxlength">3.最大长度=20</label>
                    </div>
                    <div class="col-md-8">
                        <input type="text" id="maxlength" name="maxlength" ng-model="user.maxlength" ng-maxlength="20" class="form-control" />
                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.maxlength.$dirty && myForm.maxlength.$valid"></span>
                    </div>
                </div>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="pattern">4. 模式匹配</label>
                    </div>
                    <div class="col-md-8">
                        <input type="text" id="pattern" name="pattern" ng-model="user.pattern" ng-pattern="/^[a-zA-Z]*\d$/" class="form-control" />
                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.pattern.$dirty && myForm.pattern.$valid"></span>
                    </div>
                </div>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="email">5. 电子邮件</label>
                    </div>
                    <div class="col-md-8">
                        <input type="email" id="email" name="email" ng-model="user.email" class="form-control" />
                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.email.$dirty && myForm.email.$valid"></span>
                    </div>
                </div>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="age">6. 数字</label>
                    </div>
                    <div class="col-md-8">
                        <input type="number" id="age" name="age" ng-model="user.age" class="form-control" />

                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.age.$dirty && myForm.age.$valid"></span>
                    </div>
                </div>
                <div class="form-group  has-feedback">
                    <div class="col-md-4">
                        <label for="url"> 7. URL</label>
                    </div>
                    <div class="col-md-8">
                        <input type="url" id="url" name="url" ng-model="user.url" class="form-control" />
                        <span class="glyphicon glyphicon-ok form-control-feedback"
                              ng-show="myForm.url.$dirty && myForm.url.$valid"></span>
                    </div>
                </div>
                <div class="form-group  text-center">
                    <input class="btn btn-primary btn-lg" ng-disabled="myForm.$invalid" type="submit" value="提交" />
                </div>
            </form>       
        </div>
        <div class="col-md-12">
            1.必填项:{{user.name}}&nbsp;&nbsp;
            $pristine 【没修改】:{{myForm.name.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.name.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.name.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.name.$valid}}&nbsp;&nbsp;
            required:{{myForm.name.$error.required}}&nbsp;&nbsp;
            <br>
            2.最小长度=5:{{user.minlength}}
            $pristine 【没修改】:{{myForm.minlength.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.minlength.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.minlength.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.minlength.$valid}}&nbsp;&nbsp;
            $error【错误详情】:{{myForm.minlength.$error}}&nbsp;&nbsp;<br>
            3.最大长度=20:{{user.maxlength}}
            $pristine 【没修改】:{{myForm.maxlength.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.maxlength.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.maxlength.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.maxlength.$valid}}&nbsp;&nbsp;
            $error【错误详情】:{{myForm.maxlength.$error}}&nbsp;&nbsp;<br>
            4.模式匹配:{{user.pattern}}
            $pristine 【没修改】:{{myForm.pattern.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.pattern.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.pattern.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.pattern.$valid}}&nbsp;&nbsp;
            $error【错误详情】:{{myForm.pattern.$error}}&nbsp;&nbsp;<br>
            5.电子邮件:{{user.email}}
            $pristine 【没修改】:{{myForm.email.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.email.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.email.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.email.$valid}}&nbsp;&nbsp;
            $error【错误详情】:{{myForm.email.$error}}&nbsp;&nbsp;<br>
            6.数字:{{user.age}}
            $pristine 【没修改】:{{myForm.age.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.age.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.age.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.age.$valid}}&nbsp;&nbsp;
            $error【错误详情】:{{myForm.age.$error}}&nbsp;&nbsp;<br>
            7.URL:{{user.url}}
            $pristine 【没修改】:{{myForm.url.$pristine }}&nbsp;&nbsp;
            $dirty【修改过】:{{myForm.url.$dirty}}&nbsp;&nbsp;
            $invalid【验证失败】:{{myForm.url.$invalid}}&nbsp;&nbsp;
            $invalid【验证成功】:{{myForm.url.$valid}}&nbsp;&nbsp;
            $error【错误详情】:{{myForm.url.$error}}&nbsp;&nbsp;<br>
        </div>
    </body>
</html>
<script type="text/javascript">
    angular.module('myTest', [])
        .controller('myController', function($scope) {
            $scope.submitForm = function(isValid) {
                if (!isValid) {
                    alert('验证失败');
                }
            };
        }
        );
</script>

效果如下:

三、一些有用的CSS样式

同时,ng针对这几种验证指令,针对性的设置了一些css样式

它们包括:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ng-valid         {  }
.ng-invalid     {  }
.ng-pristine     {  }
.ng-dirty         {  }
/* really specific css rules applied by angular */
.ng-invalid-required         {  }
.ng-invalid-minlength         {  }
.ng-valid-max-length         {  }

它们对应着表单输入字段的特定状态。 例如当某个字段中的输入非法时,.ng-invlid类会被添加到这个字段上。 你可以编辑自己喜欢的CSS . 你可以私有定制化这些类来实现特定的场景应用.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    input.ng-invalid{
        border: 1px solid red;
    }

四、自定义验证

 但是,默认的验证指令不一定能够,完全满足我们的真实应用场景,ng同样提供的自定义验证指令的功能。

首先我们来看一个简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
angular.module("myTest", [])
  .directive('multipleEmail', [function () {
      return {
          require: "ngModel",
          link: function (scope, element, attr, ngModel) {
              if (ngModel) {
                  var emailsRegexp = /^([a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*[;;]?)+$/i;
              }
              var customValidator = function (value) {
                  var validity = ngModel.$isEmpty(value) || emailsRegexp.test(value);
                  ngModel.$setValidity("multipleEmail", validity);
                  return validity ? value : undefined;
              };
              ngModel.$formatters.push(customValidator);
              ngModel.$parsers.push(customValidator);
          }
      };
  }])

页面Html部分代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <form class="form-horizontal" role="form" id="custom_form" name="custom_form" novalidate>
            <div class="form-group">
                <label class="col-sm-2 control-label">多个email</label>

                <div class="col-sm-10">
                    <input multiple-email name="user_email" ng-model="user.email" required class="form-control" placeholder="自定义验证,多个邮箱地址,以“;”或者“;”分割" />
                    验证通过:{{custom_form.user_email.$valid}}
                </div>
            </div>
            <div class="form-group  text-center">
                <input class="btn btn-primary btn-lg" ng-disabled="custom_form.$invalid" type="submit" value="提交" />
            </div>
        </form>

代码非常的简单,实现的效果如下所示:

这段代码很简单,但是涉及到了ngModelController的几个重要的属性

$viewValue

$viewValue属性保存着更新视图所需的实际字符串。

$modelValue

$modelValue由数据模型持有。$modelValue和$viewValue可能是不同的,取决于$parser流水线是否对其进行了操作。

$parsers 

$parsers的值是一个由函数组成的数组,当用户同控制器进行交互,并且ngModelController中的$setViewValue()方法被调用时,其中的函数在当用户同控制器进行交互,并且ngModelController中的$setViewValue()方法被调会以流水线的形式被逐一调用。ngModel从DOM中读取的值会被传入$parsers中的函数,并依次被其中的解析器处理。这是为了对值进行处理和修饰。

备注:ngModel.$setViewValue()函数用于设置作用域中的视图值。 ngModel.$set ViewValue()函数可以接受一个参数。 value(字符串):value参数是我们想要赋值给ngModel实例的实际值。 这个方法会更新控制器上本地的$viewValue,然后将值传递给每一个$parser函数(包括验证器)。当值被解析,且$parser流水线中所有的函数都调用完成后,值会被赋给$modelValue属性,并且传递给指令中ng-model属性提供的表达式。最后,所有步骤都完成后,$viewChangeListeners中所有的监听器都会被调用。注意,单独调用$setViewValue()不会唤起一个新的digest循环,因此如果想更新指令,需要在设置$viewValue后手动触发digest。$setViewValue()方法适合于在自定义指令中监听自定义事件(比如使用具有回调函数的jQuery插件),我们会希望在回调时设置$viewValue并执行digest循环。

$formatters

$formatters的值是一个由函数组成的数组,其中的函数会以流水线的形式在数据模型的值发生变化时被逐一调用。它和$parser流水线互不影响,用来对值进行格式化和转换,以便在绑定了这个值的控件中显示。

 $viewChangeListeners

$viewChangeListeners的值是一个由函数组成的数组,其中的函数会以流水线的形式在视图中的值发生变化时被逐一调用。通过$viewChangeListeners,可以在无需使用$watch的情况下实现类似的行为。由于返回值会被忽略,因此这些函数不需要返回值。

 $error

$error对象中保存着没有通过验证的验证器名称以及对应的错误信息。

 $pristine

$pristine的值是布尔型的,可以告诉我们用户是否对控件进行了修改。

 $dirty

$dirty的值和$pristine相反,可以告诉我们用户是否和控件进行过交互。

$valid

$valid值可以告诉我们当前的控件中是否有错误。当有错误时值为false,没有错误时值为true。

$invalid

$invalid值可以告诉我们当前控件中是否存在至少一个错误,它的值和$valid相反。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【原创】基础篇--文件包含漏洞总结
服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到攻击的目的。
用户6343818
2020/05/26
1.8K0
【原创】基础篇--文件包含漏洞总结
【原创】确定不看吗?基础篇--文件包含Bypass漏洞总结
本篇文章为星球团队成员原创文章,已申请原创权限,如其他公众号有需要转文,请联系信安旅程运营人员。
Power7089
2020/07/27
7280
【原创】确定不看吗?基础篇--文件包含Bypass漏洞总结
php文件包含漏洞分类目录文章标签友情链接联系我们
php文件包含漏洞 基本 相关函数 php中引发文件包含漏洞的通常是以下四个函数: include() include_once() require() require_once() reuqire(
用户1246209
2018/07/18
6850
PHP 文件包含漏洞姿势总结
文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
4.2K0
PHP 文件包含漏洞姿势总结
文件包含漏洞原理浅探
文件包含是指一个文件里面包含另外一个文件;开发过程中,重复使用的函数会写入单独的文件中,需要使用该函数的时候直接从程序中调用该文件即可,这一个过程就是“文件包含”
Mirror王宇阳
2020/11/12
5280
PHP一些常见的漏洞梳理
以下主要是近期对php一些常见漏洞的梳理,包含php文件包含、php反序列化漏洞以及php伪协议。其中 :
天钧
2020/09/14
4.6K0
PHP一些常见的漏洞梳理
干货 | 一文了解文件包含漏洞
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途。
网络安全自修室
2022/03/30
2K0
干货 | 一文了解文件包含漏洞
文件包含漏洞原理利用方式及修复
文件包含定义: 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。造成方便的同时,也留下了隐患。
黑白天安全
2020/03/10
4.3K0
文件包含漏洞原理利用方式及修复
网络安全之文件包含漏洞就是这么简单
文件包含漏洞属于代码注入漏洞,为了减少重复代码的编写,引入了文件包含函数,通过文件包含函数将文件包含进来,直接使用包含文件的代码;简单来说就是一个文件里面包含另外一个或多个文件。
Java程序猿
2023/04/26
4920
文件包含漏洞-懒人安全
一.漏洞描述 文件包含漏洞主要是程序员把一些公用的代码写在一个单独的文件中,然后使用其他文件进行包含调用,如果需要包含的文件是使用硬编码的,那么一般是不会出现安全问题,但是有时可能不确定需要包含哪些具体文件,所以就会采用变量的形式来传递需要包含的文件,但是在使用包含文件的过程中,未对包含的变量进行检查及过滤,导致外部提交的恶意数据作为变量进入到了文件包含的过程中,从而导致提交的恶意数据被执行,主要用来绕过waf上传木马文件。 二.漏洞分类 0x01本地文件包含:可以包含本地文件,在条件
奶糖味的代言
2018/04/16
1.6K0
一文了解文件包含漏洞
例子_GET['filename']参数开发者没有经过严格的过滤,直接带入了include的函数攻击者可以修改_GET['filename']的值,执行非预期的操作
红客突击队
2022/09/29
1.6K0
一文了解文件包含漏洞
任意文件包含漏洞(1)
文件包含漏洞:即file inclusion 指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()和include_once(),requir_once()),去包含任意文件。此时如果对文件来源不严格过滤审查,就容易包含恶意文件。而攻击者可以通过构造这个恶意文件来达到目的。
宸寰客
2020/08/25
1.3K0
任意文件包含漏洞(1)
cisp-pte学习笔记之文件包含
开发者在开发的过程中,会将可以重复利用的函数或者代码块写入到单个文件当中,当需要实现某些功能,直接调用对应功能的文件即可,无需重复编写,这种调用文件的过程称之为文件包含
cultureSun
2023/07/24
5000
渗透测试文件包含漏洞原理与验证(3)——PHP封装伪协议
PHP 有很多内置 URL 风格的封装协议,这类协议与fopen()、 copy()、 file_exists()和 filesize()的文件系统函数所提供的功能类似。
zhouzhou的奇妙编程
2024/11/12
1810
文件包含漏洞利用技术总结
开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
黑战士
2024/04/15
2000
代码安全之文件包含
PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
7130
代码安全之文件包含
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP;Pyhton,C源码和CTF精题及WP详解](4)
这里我们可以介绍第一个trick,即利用phpinfo会打印上传缓存文件路径的特性,进行缓存文件包含达到getshell的目的。
盛透侧视攻城狮
2024/10/21
1890
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP;Pyhton,C源码和CTF精题及WP详解](4)
文件包含漏洞(File Include)
由于在编写代码时避免麻烦就需要把公用的一段代码写到一个单独的文件里面,然后供其他文件需要时直接包含调用
偏有宸机
2020/11/04
2.1K0
CTF实战12 任意文件包含漏洞
该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关
用户1631416
2018/07/25
1.7K0
干货|超详细的常见漏洞原理笔记总结
sql注入是就是通过把SQL语句插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
网络安全自修室
2022/12/06
2.1K0
干货|超详细的常见漏洞原理笔记总结
推荐阅读
相关推荐
【原创】基础篇--文件包含漏洞总结
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 一、常用的表单验证指令 
  • 1. 必填项验证
  • 2. 最小长度
  • 3. 最大长度
  • 4. 模式匹配
  • 5. 电子邮件
  • 6. 数字
  • 7. URL
    • 屏蔽浏览器对表单的默认验证行为
  • 修改的表单
  • 未修改过的表单
  • 经过验证的表单
  • 未通过验证的表单
    • 错误
  • 三、一些有用的CSS样式
  • 同时,ng针对这几种验证指令,针对性的设置了一些css样式
  • 四、自定义验证
    • 这段代码很简单,但是涉及到了ngModelController的几个重要的属性
  • $viewValue
  • $modelValue
  • $parsers 
  • $formatters
  •  $viewChangeListeners
  •  $error
  •  $pristine
  •  $dirty
  • $valid
  • $invalid
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档