").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!c.settings.submitHandler||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&(!j.form&&j.hasAttribute("contenteditable")&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name"));var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=d),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);if("function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f){if(j=f.call(b,j),"string"!=typeof j)throw new TypeError("The normalizer should return a string value.");delete g.normalizer}for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});!function(e){var n;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var t=window.Cookies,o=window.Cookies=e();o.noConflict=function(){return window.Cookies=t,o}}}(function(){function e(){for(var e=0,n={};e
An ninh mạng là gì? Tổng hợp những thách thức hàng đầu
19/06/2023
Tại thời đại công nghệ như ngày nay, an ninh mạng đóng vai trò vô cùng quan trọng đối với mỗi cá nhân và tổ chức. Tothost sẽ cung cấp cho bạn thêm thông tin cho bạn qua bài viết “An ninh mạng là gì? Tổng hợp thách thức hàng đầu”.
Mục lục
Mục lục
1. An ninh mạng là gì?
An ninh mạng (CyberSecurity) là việc bảo vệ các hệ thống quan trọng và thông tin nhạy cảm khỏi các cuộc tấn công kỹ thuật số. Còn được gọi là an ninh công nghệ thông tin (CNTT), các biện pháp an ninh mạng được thiết kế để đối phó với các mối đe dọa đối với các hệ thống mạng và ứng dụng, cho dù những mối đe dọa đó xuất phát từ bên trong hoặc bên ngoài tổ chức.
Tại sao an ninh mạng quan trọng?
Với số lượng người dùng, thiết bị và chương trình ngày càng tăng trong doanh nghiệp hiện đại, kết hợp với lượng dữ liệu ngày càng lớn – nhiều trong số đó là nhạy cảm hoặc bí mật đã dẫn tới sự quan trọng của an ninh mạng tiếp tục tăng lên. Số lượng kẻ tấn công mạng và các kỹ thuật tấn công ngày càng phức tạp càng làm gia tăng vấn đề này.
2. Các mối đe doạ an ninh mạng phổ biến
Đồng bộ với các công nghệ mới, xu hướng bảo mật và nắm bắt thông tin về các mối đe dọa là một nhiệm vụ đầy thách thức. Điều này là cần thiết để bảo vệ thông tin và tài sản khác khỏi các mối đe dọa mạng, có nhiều hình thức khác nhau bao gồm:
Phần mềm độc hại (Malware)
Đây là một dạng phần mềm độc hại mà bất kỳ tệp hoặc chương trình nào có thể được sử dụng để gây hại cho người dùng máy tính. Các loại malware khác nhau bao gồm worms, virus, Trojan và phần mềm gián điệp (spyware).
Ransomware
Khác một chút so với Malware, kẻ tấn công sẽ khóa các tệp hệ thống máy tính của nạn nhân – thông thường thông qua việc mã hóa – và yêu cầu một khoản tiền để giải mã và mở khóa chúng.
Tấn công phi kĩ thuật (Social engineering)
Tấn công dựa trên sự tương tác con người. Nó lừa người dùng phá vỡ các quy trình bảo mật để lấy thông tin nhạy cảm thường được bảo vệ.
Lừa đảo qua email (Phishing)
Email hoặc tin nhắn văn bản giả dạng từ nguồn tin đáng tin cậy hoặc những nguồn đã biết được gửi đi. Thường là các cuộc tấn công ngẫu nhiên, mục đích của những tin nhắn này là lấy cắp dữ liệu nhạy cảm, như thông tin thẻ tín dụng hoặc đăng nhập.
Lừa đảo nhắm mục tiêu (Spear phishing)
Đây là một loại lừa đảo qua email nhắm vào một người dùng, tổ chức hoặc doanh nghiệp cụ thể.
Mối đe dọa từ bên trong (Insider threats)
Được xem là các vi phạm bảo mật hoặc mất mát do con người gây ra – ví dụ như nhân viên, nhà thầu hoặc khách hàng. Mối đe dọa từ bên trong mang tính chất độc hại hoặc cẩu thả.
Gây gián đoạn cho lưu lượng của một hệ thống nhắm mục tiêu, chẳng hạn như máy chủ, trang web hoặc tài nguyên mạng khác. Bằng cách tràn băng thông, yêu cầu kết nối hoặc gói tin vào mục tiêu, kẻ tấn công có thể làm chậm hệ thống hoặc làm nó sập, ngăn chặn lưu lượng hợp lệ sử dụng nó.
Tấn công có chủ đích (Advanced Persistent Threat – APT)
Cuộc tấn công nhắm mục tiêu kéo dài trong đó kẻ tấn công xâm nhập vào một mạng và duy trì sự ẩn thân trong thời gian dài với mục đích đánh cắp dữ liệu.
Tấn công xen giữa (Man-in-the-Middle Attack)
là các cuộc tấn công nghe trộm liên quan đến kẻ tấn công chặn và chuyển tiếp tin nhắn giữa hai bên tin rằng họ đang giao tiếp với nhau.
Botnet
Mạng các máy tính bị nhiễm phần mềm độc hại, mà kẻ tấn công mạng sử dụng để thực hiện các nhiệm vụ trực tuyến mà không cần sự cho phép của người dùng.
SQL injection
là một loại cuộc tấn công mạng được sử dụng để kiểm soát và đánh cắp dữ liệu từ cơ sở dữ liệu. Kẻ tấn công mạng lợi dụng nhược điểm trong các ứng dụng dựa trên dữ liệu để chèn mã độc hại vào cơ sở dữ liệu thông qua một câu lệnh SQL độc hại. Điều này cho phép họ truy cập vào thông tin nhạy cảm có trong cơ sở dữ liệu.
Các cuộc tấn công phổ biến khác bao gồm tấn công tải xuống ngầm, bộ công cụ khai thác, quảng cáo độc hại (adware), vishing, cuộc tấn công stuffing thông tin xác thực, cuộc tấn công cross-site scripting (XSS), cuộc tấn công SQL injection, cuộc tấn công lừa đảo email doanh nghiệp (BEC) và các lỗ hổng zero-day.
3. Bảo vệ người dùng cuối
Bảo vệ người dùng cuối hoặc bảo mật điểm cuối là một khía cạnh quan trọng trong an ninh mạng. Cuối cùng, thường là người sử dụng (người dùng cuối) vô tình tải lên phần mềm độc hại hoặc một hình thức tấn công mạng khác vào máy tính để bàn, máy tính xách tay hoặc thiết bị di động của họ.
3.1. Cách bảo vệ
Vậy, các biện pháp an ninh mạng làm thế nào để bảo vệ người dùng cuối và hệ thống? Đầu tiên, an ninh mạng dựa vào giao thức mật mã hóa để mã hóa email, tệp tin và dữ liệu quan trọng khác. Điều này không chỉ bảo vệ thông tin khi truyền, mà còn ngăn chặn mất mát hoặc mất cắp.
Ngoài ra, phần mềm bảo mật của người dùng cuối quét máy tính để tìm kiếm các đoạn mã độc hại, cách ly đoạn mã này và sau đó loại bỏ nó khỏi máy. Các chương trình bảo mật có thể phát hiện và loại bỏ đoạn mã độc hại được ẩn trong bộ nhớ khởi động chính và được thiết kế để mã hóa hoặc xóa dữ liệu từ ổ cứng của máy tính.
3.2. Công cụ bảo vệ
Các giao thức bảo mật điện tử cũng tập trung vào việc phát hiện mã độc trong thời gian thực. Nhiều chương trình sử dụng phân tích theo hướng chủ nghĩa và hành vi để theo dõi hành vi của một chương trình và mã của nó nhằm phòng chống virus hoặc Trojan thay đổi hình dạng mỗi lần thực thi (mã độc polymorphic và metamorphic). Các chương trình bảo mật có thể hạn chế các chương trình có khả năng gây hại vào một “hộp cát” ảo riêng biệt với mạng của người dùng để phân tích hành vi của chúng và tìm hiểu cách phát hiện nhiễm sắc mới tốt hơn.
Các chương trình bảo mật tiếp tục phát triển các phương pháp phòng thủ mới khi các chuyên gia an ninh mạng xác định ra các mối đe dọa mới và cách mới để chống lại chúng. Để tận dụng tối đa phần mềm bảo mật người dùng cuối, nhân viên cần được giáo dục về cách sử dụng nó. Quan trọng nhất, duy trì hoạt động và cập nhật thường xuyên đảm bảo rằng nó có thể bảo vệ người dùng khỏi các mối đe dọa mạng mới nhất.
4. Những thách thức hàng đầu trong lĩnh vực an ninh mạng là gì?
Cuộc tấn công mạng, mất dữ liệu, quyền riêng tư, quản lý rủi ro và sự thay đổi trong chiến lược an ninh mạng là những thách thức liên quan đến an ninh mạng. Số lượng cuộc tấn công mạng không dự kiến giảm trong tương lai gần. Hơn nữa, việc tăng cửa ngõ tấn công, chẳng hạn như với sự xuất hiện của internet vạn vật (IoT), và sự gia tăng của bề mặt tấn công làm tăng nhu cầu bảo vệ mạng và thiết bị.
Các thách thức chính cần liên tục được đối phó bao gồm các mối đe dọa tiến hóa, đại dương dữ liệu, huấn luyện nhận thức về an ninh mạng, thiếu hụt nhân lực và khoảng trống kỹ năng, cũng như rủi ro chuỗi cung ứng và bên thứ ba.
4.1. Sự tiến hoá của mối đe doạ
Một trong những yếu tố gây rối nhất của an ninh mạng là sự tiến hóa không ngừng của các rủi ro an ninh. Khi công nghệ mới xuất hiện, và khi công nghệ được sử dụng theo cách mới hoặc khác biệt, các con đường tấn công mới được phát triển. Theo kịp những thay đổi và tiến bộ thường xuyên trong các cuộc tấn công, cũng như cập nhật các phương pháp bảo vệ chống lại chúng, có thể là một thách thức. Các vấn đề bao gồm đảm bảo tất cả các yếu tố của an ninh mạng được cập nhật liên tục để bảo vệ khỏi những lỗ hổng tiềm năng. Điều này đặc biệt khó khăn đối với các tổ chức nhỏ hơn không có đủ nhân viên hoặc tài nguyên nội bộ.
4.2. Tràn dữ liệu
Ngoài ra, các tổ chức có thể thu thập được rất nhiều dữ liệu tiềm năng về những người sử dụng một hoặc nhiều dịch vụ của họ. Với việc thu thập nhiều dữ liệu hơn, khả năng một kẻ tấn công mạng muốn đánh cắp thông tin cá nhân có thể là một mối quan ngại khác. Ví dụ, một tổ chức lưu trữ thông tin cá nhân nhạy cảm trong đám mây có thể bị tấn công ransomware. Các tổ chức nên làm mọi thứ có thể để ngăn chặn việc xâm nhập vào đám mây.
4.3. Đào tạo nhận thức về an ninh mạng
Các chương trình an ninh mạng cũng nên chú trọng đến việc giáo dục người dùng cuối. Nhân viên có thể vô tình mang vào nơi làm việc các mối đe dọa và lỗ hổng trên laptop hoặc thiết bị di động của họ. Tương tự, họ có thể hành động không an toàn – ví dụ như nhấp vào liên kết hoặc tải xuống tệp đính kèm từ các email lừa đảo.
Đào tạo nhận thức về an ninh định kỳ sẽ giúp nhân viên đóng góp vào việc bảo vệ công ty khỏi các mối đe dọa mạng.
4.4. Thiếu hụt nhân lực và kỹ năng
Một thách thức khác đối với an ninh mạng là thiếu hụt nhân lực chuyên gia an ninh mạng đủ trình độ. Khi lượng dữ liệu được thu thập và sử dụng bởi doanh nghiệp ngày càng tăng, nhu cầu về nhân viên an ninh mạng để phân tích, quản lý và phản ứng với các sự cố cũng tăng lên. (ISC)2 ước tính khoảng cách trong công việc giữa những vị trí an ninh mạng cần thiết và các chuyên gia an ninh là 3,4 triệu người.
4.5. Tấn công chuỗi cung ứng và rủi ro từ bên thứ ba
Các tổ chức có thể cố gắng duy trì an ninh, nhưng nếu các đối tác, nhà cung cấp và nhà cung ứng bên thứ ba truy cập vào mạng của họ không đảm bảo an toàn, tất cả những nỗ lực đó đều trở nên vô ích.
Những cuộc tấn công chuỗi cung ứng dựa trên phần mềm và phần cứng ngày càng trở thành những thách thức an ninh khó khăn để đối mặt. Tổ chức phải đối phó với rủi ro từ bên thứ ba trong chuỗi cung ứng và giảm thiểu các vấn đề cung cấp phần mềm, ví dụ như sử dụng các bản khai báo phần mềm.
Kết luận
Trong thế giới kỹ thuật số ngày nay, an ninh mạng trở thành một vấn đề cực kỳ quan trọng và không thể bỏ qua. Với sự gia tăng đáng kể về các cuộc tấn công mạng và mức độ phức tạp ngày càng cao của các mối đe dọa, việc đảm bảo an toàn cho thông tin và hệ thống đã trở thành một nhiệm vụ cấp bách mà mọi cá nhân hay tổ chức đều cần phải chú trọng.
Ứng dụng Điện toán đám mây (Cloud Computing) là sử dụng công nghệ đám mây phục vụ cho nhiều công việc khác nhau, được kết nối qua internet. Đám mây mang lại lợi thế bao gồm khả năng mở rộng, tính linh hoạt, hiệu quả chi phí, bảo mật và đổi mới cho các tổ chức ở mọi quy mô và lĩnh vực. Do đó, nó được các tổ chức áp dụng để đạt được mục tiêu và giải quyết các vấn đề của họ.Dưới đây là Top 10 ứng dụng phổ biến nhất của điện toán đám mây.
Nếu bạn đang thắc mắc liệu có nên chuyển đổi sang Điện toán đám mây (Cloud Computing) hay vẫn nên chọn on-premise thì bài viết này sẽ giúp bạn hiểu rõ hơn về những lợi ích của việc chuyển đổi này.
Khi bạn kết nối máy tính hoặc thiết bị của mình với internet, bạn cần có địa chỉ IP. Địa chỉ IP có hai loại phân bổ: động và tĩnh. Tại bài viết này, TotHost sẽ hướng dẫn bạn Cách kiểm tra địa chỉ IP bạn đang sử dụng là động hay tĩnh.
cPanel là một control panel – hệ thống quản trị web hosting phổ biến và mạnh mẽ nhất hiện nay, hoạt động dựa trên nền tảng Linux. Nó có giao diện đơn giản, linh hoạt hỗ trợ quản trị hosting và website một cách dễ dàng. Tại đây, TotHost sẽ hướng dẫn bạn cách tạo Backup và Restore trên cPanel.
Hiện nay, công nghệ trí tuệ nhân tạo đang bùng nổ mạnh mẽ tạo ra những tiềm năng to lớn trong nhiều lĩnh vực trong cuộc sống. Để làm được điều đó thì không thể thiếu AI tạo sinh (Generative AI). Vậy, Gen AI là gì? Nó có đóng góp gì trong thực tiễn? Hãy cùng tìm hiểu qua bài viết này nhé!
Cụm từ “đứt cáp quang biển” hay “cá mập cắn cáp” thường được nhắc tới mỗi khi kết nối mạng Việt Nam với quốc tế gặp vấn đề. Vậy cáp quang biển là gì? Việt Nam hiện tại đang có bao nhiêu tuyến cáp quang? Cùng TotHost tìm hiểu nhé!