PHP100编程安全性小结

  规则 1:绝不要信任外部数据或输入

  关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据。在采取措施确保安全之前,来自任何其他来源(比如 GET 变量、表单 POST、数据库、配置文件、会话变量或 cookie)的任何数据都是不可信任的。

  对用户输入进行清理的一个简单方法是,使用正则表达式来处理它。

  规则 2:禁用那些使安全性难以实施的 PHP 设置

  已经知道了不能信任用户输入,还应该知道不应该信任机器上配置 PHP 的方式。例如,要确保禁用 register_globals。如果启用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替换同名的 GET 或 POST 字符串。通过禁用这个设置,PHP 强迫您在正确的名称空间中引用正确的变量。要使用来自表单 POST 的变量,应该引用 $_POST['variable']。这样就不会将这个特定变量误会成 cookie、会话或 GET 变量。

  要 检查的第二个设置是错误报告级别。在开发期间,希望获得尽可能多的错误报告,但是在交付项目时,希望将错误记录到日志文件中,而不是显示在屏幕上。为什么 呢?因为恶意的黑客会使用错误报告信息(比如 SQL 错误)来猜测应用程序正在做什么。这种侦察可以帮助黑客突破应用程序。为了堵住这个漏洞,需要编辑 php.ini 文件,为 error_log 条目提供合适的目的地,并将 display_errors 设置为 Off。

  规则 3:如果不能理解它,就不能保护它

  一些开发人员使用奇怪的语法,或者将语句组织得很紧凑,形成简短但是含义模糊的代码。这种方式可能效率高,但是如果您不理解代码正在做什么,那么就无法决定如何保护它。

  规则 4:“纵深防御” 是新的法宝

  即使使用 PHP regex 来确保 GET 变量完全是数字的,仍然可以采取措施确保 SQL 查询使用转义的用户输入。

  纵深防御不只是一种好思想,它可以确保您不会陷入严重的麻烦。

240多个jQuery插件

概述

jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理 HTML documents、events、实现动画效果,并且方便地为网站提供 AJAX 交互。 jQuery 还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery 能够使用户的 html 页保持代码和 html 内容分离,也就是说,不用再在 html 里面插入一堆js来调用命令了,只需定义 id 即可。今天在Kollermedia.at
上发现了一篇JQuery插件列表的文章
,特推荐如下。


文件上传(File upload)JQuery_001


Ajax File Upload
.
jQUploader
.
Multiple File Upload plugin

jQuery File Style
.
Styling an input type file
.
Progress Bar Plugin
.


表单验证(Form Validation)


jQuery Validation
.
Auto Help
.
Simple jQuery form validation
.
jQuery XAV - form validations
.
jQuery AlphaNumeric
.
Masked Input
.
TypeWatch Plugin
.
Text limiter for form fields
.
Ajax Username Check with jQuery
.


表单-选取框(Form - Select Box stuff)


jQuery Combobox
.
jQuery controlled dependent (or Cascadign) Select List
.
Multiple Selects
.
Select box manipulation
.
Select Combo Plugin
.
jQuery - LinkedSelect
Auto-populate multiple select boxes
.
Choose Plugin (Select Replacement)
.


表单基本、输入框、选择框等(Form Basics, Input Fields, Checkboxes etc.)


jQuery Form Plugin
.
jQuery-Form
.
jLook Nice Forms
.
jNice
.
Ping Plugin
.
Toggle Form Text
.
ToggleVal
.
jQuery Field Plugin
.
jQuery Form’n Field plugin
.
jQuery Checkbox manipulation
.
jTagging
.
jQuery labelcheck
.
Overlabel
.
3 state radio buttons
.
ShiftCheckbox jQuery Plugin
.
Watermark Input
.
jQuery Checkbox (checkboxes with imags)
.
jQuery SpinButton Control
.
jQuery Ajax Form Builder
.
jQuery Focus Fields
.
jQuery Time Entry
.


时间、日期和颜色选取(Time, Date and Color Picker)


jQuery UI Datepicker
.
jQuery date picker plugin
.
jQuery Time Picker
.
Time Picker
.
ClickPick
.
TimePicker
.
Farbtastic jQuery Color Picker Plugin
.
Color Picker by intelliance.fr
.


投票插件(Rating Plugins)


jQuery Star Rating Plugin
.
jQuery Star Rater
.
Content rater with asp.net, ajax and jQuery
.
Half-Star Rating Plugin
.


搜索插件(Search Plugins)


jQuery Suggest
.
jQuery Autocomplete
.
jQuery Autocomplete Mod
.
jQuery Autocomplete by AjaxDaddy
.
jQuery Autocomplete Plugin with HTML formatting
.
jQuery Autocompleter
.
AutoCompleter (Tutorial with PHP&MySQL)
.
quick Search jQuery Plugin
.


编辑器(Inline Edit & Editors)JQuery_002


jTagEditor
.
WYMeditor
.
jQuery jFrame
.
Jeditable - edit in place plugin for jQuery
.
jQuery editable
.
jQuery Disable Text Select Plugin
.
Edit in Place with Ajax using jQuery
.
jQuery Plugin - Another In-Place Editor
.
TableEditor
.
tEditable - in place table editing for jQuery
.


多媒体、视频、Flash等(Audio, Video, Flash, SVG, etc)


jMedia - accessible multi-media embedding
.
JBEdit - Ajax online Video Editor
.
jQuery MP3 Plugin
.
jQuery Media Plugin
.
jQuery Flash Plugin
.
Embed QuickTime
.
SVG Integration
.


图片(Photos/Images/Galleries)


ThickBox
.
jQuery lightBox plugin
.
jQuery Image Strip
.
jQuery slideViewer
.
jQuery jqGalScroll 2.0
.
jQuery - jqGalViewII
.
jQuery - jqGalViewIII
.
jQuery Photo Slider
.
jQuery Thumbs - easily create thumbnails
.
jQuery jQIR Image Replacement
.
jCarousel Lite
.
jQPanView
.
jCarousel
.
Interface Imagebox
.
Image Gallery using jQuery, Interface & Reflactions
.
simple jQuery Gallery
.
jQuery Gallery Module
.
EO Gallery
.
jQuery ScrollShow
.
jQuery Cycle Plugin
.
jQuery Flickr
.
jQuery Lazy Load Images Plugin
.
Zoomi - Zoomable Thumbnails
.
jQuery Crop - crop any image on the fly
.
Image Reflection
.


Google地图(Google Map)


jQuery Plugin googlemaps
.
jMaps jQuery Maps Framework
.
jQmaps
.
jQuery & Google Maps
.
jQuery Maps Interface forr Google and Yahoo maps
.
jQuery J Maps - by Tane Piper
.


游戏(Games)


Tetris with jQuery
.
jQuery Chess
.
Mad Libs Word Game
.
jQuery Puzzle
.
jQuery Solar System (not a game but awesome jQuery Stuff)
.


表格等(Tables, Grids etc.)


UI/Tablesorter
.JQuery_003
jQuery ingrid
.
jQuery Grid Plugin
.
Table Filter - awesome!
.
TableEditor
.
jQuery Tree Tables
.
Expandable “Detail” Table Rows
.
Sortable Table ColdFusion Costum Tag with jQuery UI
.
jQuery Bubble
.
TableSorter
.
Scrollable HTML Table
.
jQuery column Manager Plugin
.
jQuery tableHover Plugin
.
jQuery columnHover Plugin
.
jQuery Grid
.
TableSorter plugin for jQuery
.
tEditable - in place table editing for jQuery
.
jQuery charToTable Plugin
.
jQuery Grid Column Sizing
.
jQuery Grid Row Sizing
.


统计图(Charts, Presentation etc.)


jQuery Wizard Plugin
.
jQuery Chart Plugin
.
Bar Chart
.


边框、圆角、背景(Border, Corners, Background)


jQuery Corner
.
jQuery Curvy Corner
.
Nifty jQuery Corner
.
Transparent Corners
.
jQuery Corner Gallery
.
Gradient Plugin
.


文字和超链接(Text and Links)


jQuery Spoiler plugin
.
Text Highlighting
.
Disable Text Select Plugin
.
jQuery Newsticker
.
Auto line-height Plugin
.
Textgrad - a text gradient plugin
.
LinkLook - a link thumbnail preview
.
pager jQuery Plugin
.
shortKeys jQuery Plugin
.
jQuery Biggerlink
.
jQuery Ajax Link Checker
.


鼠标提示(Tooltips)


jQuery Plugin - Tooltip
.
jTip - The jQuery Tool Tip
.
clueTip
.
BetterTip
.
Flash Tooltips using jQuery
.
ToolTip
.


菜单和导航(Menus, Navigations)


jQuery Tabs Plugin - awesome!
. [demo nested tabs
.]
another jQuery nested Tab Set example (based on jQuery Tabs Plugin)
.
jQuery idTabs
.
jdMenu - Hierarchical Menu Plugin for jQuery
.
jQuery SuckerFish Style
.
jQuery Plugin Treeview
.
treeView Basic
.
FastFind Menu
.
Sliding Menu
.
Lava Lamp jQuery Menu
.
jQuery iconDock
.
jVariations Control Panel
.
ContextMenu plugin
.
clickMenu
.
CSS Dock Menu
.
jQuery Pop-up Menu Tutorial
.
Sliding Menu
.

http://stilbuero.de/jquery/tabs_3/


幻灯、翻转等(Accordions, Slide and Toggle stuff)


jQuery Plugin Accordion
.
jQuery Accordion Plugin Horizontal Way
.
haccordion - a simple horizontal accordion plugin for jQuery
.
Horizontal Accordion by portalzine.de
.
HoverAccordion
.
Accordion Example from fmarcia.info
.
jQuery Accordion Example
.
jQuery Demo - Expandable Sidebar Menu
.
Sliding Panels for jQuery
.
jQuery ToggleElements
.
Coda Slider
.
jCarousel
.
Accesible News Slider Plugin
.
Showing and Hiding code Examples
.
jQuery Easing Plugin
.
jQuery Portlets
.
AutoScroll
.
Innerfade
.


拖放插件(Drag and Drop)


UI/Draggables
.
EasyDrag jQuery Plugin
.
jQuery Portlets
.
jqDnR - drag, drop resize
.
Drag Demos
.


XML XSL JSON Feeds


XSLT Plugin
.
jQuery Ajax call and result XML parsing
.
xmlObjectifier - Converts XML DOM to JSON
.
jQuery XSL Transform
.
jQuery Taconite - multiple Dom updates
.
RSS/ATOM Feed Parser Plugin
.
jQuery Google Feed Plugin
.


浏览器(Browserstuff)


Wresize - IE Resize event Fix Plugin
.
jQuery ifixpng
.
jQuery pngFix
.
Link Scrubber - removes the dotted line onfocus from links
.
jQuery Perciformes - the entire suckerfish familly under one roof
.
Background Iframe
.
QinIE - for proper display of Q tags in IE
.
jQuery Accessibility Plugin
.
jQuery MouseWheel Plugin
.


对话框、确认窗口(Alert, Prompt, Confirm Windows)


jQuery Impromptu
.
jQuery Confirm Plugin
.
jqModal
.
SimpleModal
.


CSS


jQuery Style Switcher
.
JSS - Javascript StyleSheets
.
jQuery Rule - creation/manipulation of CSS Rules
.
jPrintArea
.


DOM、AJAX和其它JQuery插件(DOM, Ajax and other jQuery plugins)


FlyDOM
.
jQuery Dimenion Plugin
.
jQuery Loggin
.
Metadata - extract metadata from classes, attributes, elements
.
Super-tiny Client-Side Include Javascript jQuery Plugin
.
Undo Made Easy with Ajax
.
JHeartbeat - periodically poll the server
.
Lazy Load Plugin
.
Live Query
.
jQuery Timers
.
jQuery Share it - display social bookmarking icons
.
jQuery serverCookieJar
.
jQuery autoSave
.
jQuery Puffer
.
jQuery iFrame Plugin
.
Cookie Plugin for jQuery
.
jQuery Spy - awesome plugin
.
Effect Delay Trick
.
jQuick - a quick tag creator for jQuery
.
Metaobjects

.
elementReady
.

jquery表单验证插件

Form插件,支持Ajax,支持Ajax文件上传,功能强大,基本满足日常应用。

1、JQuery框架软件包下载

文件:jquery.rar
大小:29KB
下载:下载


2、Form插件下载

文件:jquery.form.rar
大小:7KB
下载:下载




3、Form插件的简单入门
第一步:先增加一个表单

 

<formid="myForm"action="comment.php"method="post">
     Name:<inputtype="text"name="name"/>
     Comment:<textareaname="comment"></textarea>
     <inputtype="submit"value="Submit Comment"/>
</form>

第二步:jquery.js和form.js文件的包含

<head>
     <scripttype="text/javascript"src="path/to/jquery.js"></script>
     <scripttype="text/javascript"src="path/to/form.js"></script>
      <scripttype="text/javascript">
         
// wait for the DOM to be loaded
          $(document).ready(function(){
             
// bind 'myForm' and provide a simple callback function
          $('#myForm').ajaxForm(function(){
                 alert("Thank you for your comment!");
             });
         });
     </script>
</head>



============================
该插件的作者在介绍form.js时,说了这样的一句话:

Submitting a form with AJAX doesn't get any easier than this!

 

表单插件API


英文原文:
http://www.malsup.com/jquery/form/#api

表单插件API提供了几个方法,让你轻松管理表单数据和进行表单提交。

ajaxForm

增 加所有需要的事件监听器,为AJAX提交表单做好准备。ajaxForm不能提交表单。在document的ready函数中,使用ajaxForm来为 AJAX提交表单进行准备。ajaxForm接受0个或1个参数。这个单个的参数既可以是一个回调函数,也可以是一个Options对象。
可链接(Chainable):可以。

实例:


$('#myFormId').ajaxForm();


ajaxSubmit

马上由AJAX来提交表单。大多数情况下,都是调用ajaxSubmit来对用户提交表单进行响应。ajaxSubmit接受0个或1个参数。这个单个的参数既可以是一个回调函数,也可以是一个Options对象。
可链接(Chainable):可以。

实例:
// 绑定表单提交事件处理器
$('#myFormId').submit(function() {
    // 提交表单
    $(this).ajaxSubmit();
    // 为了防止普通浏览器进行表单提交和产生页面导航(防止页面刷新?)返回false
    return false;
   });


formSerialize

将表单串行化(或序列化)成一个查询字符串。这个方法将返回以下格式的字符串:name1=value1&name2=value2
可链接(Chainable):不能, 这个方法返回一个字符串。

实例:
var queryString = $('#myFormId').formSerialize();

// 现在可以使用$.get、$.post、$.ajax等来提交数据
$.post('myscript.php', queryString);

fieldSerialize

将表单的字段元素串行化(或序列化)成一个查询字符串。当只有部分表单字段需要进行串行化(或序列化)时,这个就方便了。这个方法将返回以下格式的字符串:name1=value1&name2=value2
可链接(Chainable):不能,这个方法返回一个字符串。

实例:
var queryString = $('#myFormId .specialFields').fieldSerialize();


fieldValue

返回匹配插入数组中的表单元素值。从0.91版起,该方法将总是以数组的形式返回数据。如果元素值被判定可能无效,则数组为空,否则它将包含一个或多于一个的元素值。
可链接(Chainable):不能,该方法返回数组。

实例:
// 取得密码输入值
var value = $('#myFormId :password').fieldValue();
alert('The password is: ' + value[0]);


resetForm

通过调用表单元素原有的DOM方法,将表单恢复到初始状态。
可链接(Chainable):可以。

实例:
$('#myFormId').resetForm();


clearForm

清除表单元素。该方法将所有的文本(text)输入字段、密码(password)输入字段和文本区域(textarea)字段置空,清除任何select元素中的选定,以及将所有的单选(radio)按钮和多选(checkbox)按钮重置为非选定状态。
可链接(Chainable):可以。

$('#myFormId').clearForm();


clearFields

清除字段元素。只有部分表单元素需要清除时才方便使用。
可链接(Chainable):可以。

$('#myFormId .specialFields').clearFields();


Options对象

ajaxForm和ajaxSubmit都支持众多的选项参数,这些选项参数可以使用一个Options对象来提供。Options只是一个JavaScript对象,它包含了如下一些属性与值的集合:

target

指明页面中由服务器响应进行更新的元素。元素的值可能被指定为一个jQuery选择器字符串,一个jQuery对象,或者一个DOM元素。
默认值:null。

url

指定提交表单数据的URL。
默认值:表单的action属性值

type

指定提交表单数据的方法(method):“GET”或“POST”。
默认值:表单的method属性值(如果没有找到默认为“GET”)。

beforeSubmit

表 单提交前被调用的回调函数。“beforeSubmit”回调函数作为一个钩子(hook),被提供来运行预提交逻辑或者校验表单数据。如果 “beforeSubmit”回调函数返回false,那么表单将不被提交。“beforeSubmit”回调函数带三个调用参数:数组形式的表单数 据,jQuery表单对象,以及传入ajaxForm/ajaxSubmit中的Options对象。表单数组接受以下方式的数据:

[ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]


默认值:null

success

表单成功提交后调用的回调函数。如果提供“success”回调函数,当从服务器返回响应后它被调用。然后由dataType选项值决定传回responseText还是responseXML的值。
默认值:null

dataType

期望返回的数据类型。null、“xml”、“script”或者“json”其中之一。dataType提供一种方法,它规定了怎样处理服务器的响应。这个被直接地反映到jQuery.httpData方法中去。下面的值被支持:

'xml':如果dataType == 'xml',将把服务器响应作为XML来对待。同时,如果“success”回调方法被指定, 将传回responseXML值。

'json':如果dataType == 'json', 服务器响应将被求值,并传递到“success”回调方法,如果它被指定的话。

'script':如果dataType == 'script', 服务器响应将求值成纯文本。


默认值:null(服务器返回responseText值)

semantic

Boolean flag indicating whether data must be submitted in strict semantic order (slower). Note that the normal form serialization is done in semantic order with the exception of input elements of type="image". You should only set the semantic option to true if your server has strict semantic requirements and your form contains an input element of type="image".
布 尔标志,表示数据是否必须严格按照语义顺序(slower?)来进行提交。注意:一般来说,表单已经按照语义顺序来进行了串行化(或序列化),除了 type="image"的input元素。如果你的服务器有严格的语义要求,以及表单中包含有一个type="image"的input元素,就应该将 semantic设置为true。(译注:这一段由于无法理解,翻译出来可能语不达意,但请达人指正。)
默认值:false

resetForm

布尔标志,表示如果表单提交成功是否进行重置。
Default value: null

clearForm

布尔标志,表示如果表单提交成功是否清除表单数据。
默认值:null

实例:

// 准备好Options对象
var options = {
    target:     '#divToUpdate',
    url:        'comment.php',
    success: function() {
      alert('Thanks for your comment!');
    } };

   // 将options传给ajaxForm
$('#myForm').ajaxForm(options);


注意:Options对象还可以用来将值传递给jQuery的$.ajax方法。如果你熟悉$.ajax所支持的options,你可以利用它们来将Options对象传递给ajaxForm和ajaxSubmit。

使用用隐藏的IFrame提交表单开发的经验总结

Ajax虽然不错,但无法上传文件,可以用隐藏的 IFrame 提交表单部分替代Ajax。
原理如下:
1.写一个Javascript类,动态添加一个IFrame。具体是在 document.body 对象中appendChild 如下结构:
<DIV id="i_frame_div">
  <IFrame id="i_frame" name="i_frame" width="1px" height="1px" style="display:none" src="inner.html"></IFrame>
</DIV>
这是通过Style的"display:none",来实现IFrame的不可见的;
不可以设成style="width:0px,height:0px,display:none",这样会导致一些浏览器不添加IFrame
首先用DOM的方式生成<DIV>,然后使用:
  var i_div = document.getElementById("i_frame_div");
  i_div.innerHTML="<IFrame id=\"i_frame\" name=\"i_frame\" width=\"1px\" height=\"1px\" style=\"display:none\" src=\"inner.html\"></IFrame>";
的方式将IFrame嵌入页面内;
注意,不要使用 DOM 的方式,这样会导致通过 IE 的 DOM 树不能正常获得IFrame内前网页的内容;
即不要采取如下形式:
  var i_frame=document.createElement("IFrame");
  i_frame.id="i_frame";
  ...
  var i_div = document.getElementById("i_frame_div");
  i_div.appendChild(i_frame);
这样的代码在<Form target="i_frame">提交时,IFrame的内嵌页面inner.html在FireFox中会自动刷新。而IE 6.0 则会新弹出一个窗口;
src属性必须指定一个空的html文件;

2.将这个类实例化为一个全局变量,这个类的构造函数就写成以上代码;

3.写一个<Form>, 注意:
将其属性target指向IFrame的名称,这样提交后返回的目标页面就会在IFrame中,而不被看见。
将提交按钮改为一般的Button :<INPUT type="button" onclick="func()">

4.为以上类添加一个函数sendFileRequest(),参数放入Form的名称和回调函数的指针,这样就可以像表单中在提交前添加一些需要的变量,并且提交;

5.这里注意一点,如果表单<Form>中不包含<Input type="file">这样的元素的话,表单内容完全可以自动生成,例如可以通过函数sendFileRequest()进行构建,或在嵌入的页 中进行构建,然后把表单的各种值以Key=Value数组的形式传入,借此可以封装成一个函数:
var form=document.createElement("Form");
...
但如果包含<Input type="file">的话,文件上传时该tag的属性value是文件的名称,而此属性是只读的不能被赋值:
var fileInput=document.createElement("Input");
fileInput.type="file";
fileInput.name="myName"
fileInput.value="myfile.txt" //此句会出错
这是由于安全的原因,<Input type="file">不能被赋值;
这样,表单必须做正常形式,target指向IFrame的name。

6.在以上的那个类中,再添加一个函数作为回调函数getResponse(msg):
  getResponse:function(msg){
   this.responseText=msg;
   this.HandleResponse.call(this);
   //调用用户传入的回调函数
  }

7.服务器端程序的撰写。主要是向IFrame提交一个可自动运行的网页:
<HTML>
 <HEAD><TITLE></TITLE></HEAD>
 <BODY onload="doit();"></BODY>
 <SCRIPT LANGUAGE="JavaScript">
 <!--
  function doit(){
   parent.fileuploader.getResponse(msg);
   //调用回调函数
  }
 //-->
 </SCRIPT>
</HTML>

JS大全

1.document.write(""); 输出语句
2.JS中的注释为//
3.传统的HTML文档顺序是:document->html->(head,body)
4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document)
5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value)
6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();
7.JS中的值类型:String,Number,Boolean,Null,Object,Function
8.JS中的字符型转换成数值型:parseInt(),parseFloat()
9.JS中的数字转换成字符型:(""+变量)
10.JS中的取字符串长度是:(length)
11.JS中的字符与字符相连接使用+号.
12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<=
13.JS中声明变量使用:var来进行声明
14.JS中的判断语句结构:if(condition){}else{}
15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}
16.循环中止的命令是:break
17.JS中的函数定义:function functionName([parameter],...){statement[s]}
18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.
19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self
20.状态栏的设置:window.status="字符";
21.弹出提示信息:window.alert("字符");
22.弹出确认框:window.confirm();
23.弹出输入提示框:window.prompt();
24.指定当前显示链接的位置:window.location.href="URL"
25.取出窗体中的所有表单的数量:document.forms.length
26.关闭文档的输出流:document.close();
27.字符串追加连接符:+=
28.创建一个文档元素:document.createElement(),document.createTextNode()
29.得到元素的方法:document.getElementById()
30.设置表单中所有文本型的成员的值为空:
var form = window.document.forms[0]
for (var i = 0; i<form.elements.length;i++){
         if (form.elements[i].type == "text"){
             form.elements[i].value = "";
         }
}
31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)
32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length
33.单选按钮组判断是否被选中也是用checked.
34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)
35.字符串的定义:var myString = new String("This is lightsword");
36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();
37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.
38.取字符串中指定位置的一个字符:StringA.charAt(9);
39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数
41.定义日期型变量:var today = new Date();
42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒      [注意:此日期时间从0开始计]
43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName
44.parent代表父亲对象,top代表最顶端对象
45.打开子窗口的父窗口为:opener
46.表示当前所属的位置:this
47.当在超链接中调用JS函数时用:(Javascript:)来开头后面加函数名
48.在老的浏览器中不执行此JS:<!--          //-->
49.引用一个文件式的JS:<script type="text/Javascript" src="aaa.js"></script>
50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript>
51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<a href="a.html" onclick="location.href='b.html';return false">dfsadf</a>
52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError
53.JS中的换行:\n
54.窗口全屏大小:<script>function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</script>
55.JS中的all代表其下层的全部元素

56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1
57.innerHTML的值是表单元素的值:如<p id="para">"how are <em>you</em>"</p>,则innerHTML的值就是:how are <em>you</em>
58.innerTEXT的值和上面的一样,只不过不会把<em>这种标记显示出来.
59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.
60.isDisabled判断是否为禁止状态.disabled设置禁止状态
61.length取得长度,返回整型数值
62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc
63.window.focus()使当前的窗口在所有窗口之前.
64.blur()指失去焦点.与FOCUS()相反.
65.select()指元素为选中状态.
66.防止用户对文本框中输入文本:onfocus="this.blur()"
67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length
68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()
69.状态栏文字的设置:window.status='文字',默认的状态栏文字设置:window.defaultStatus = '文字.';
70.添加到收藏夹:external.AddFavorite("http://www.xrss.cn","jaskdlf");
71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;
72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.
73.JS中的self指的是当前的窗口
74.JS中状态栏显示内容:window.status="内容"
75.JS中的top指的是框架集中最顶层的框架
76.JS中关闭当前的窗口:window.close();
77.JS中提出是否确认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}
78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn");
79.JS中的打印:window.print()
80.JS中的提示输入框:window.prompt("message","defaultReply");
81.JS中的窗口滚动条:window.scroll(x,y)
82.JS中的窗口滚动到位置:window.scrollby
83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout
84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);
85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}}      window.onbeforeunload=verifyClose;
86.当窗体第一次调用时使用的文件句柄:onload()
87.当窗体关闭时调用的文件句柄:onunload()
88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳转到相应的锚记),href(全部的信息)
89.window.location.reload()刷新当前页面.
89-1.parent.location.reload()刷新父亲对象(用于框架)
89-2.opener.location.reload()刷新父窗口对象(用于单开窗口)
89-3.top.location.reload()刷新最顶端对象(用于多开窗口)
90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)
91.document.write()不换行的输出,document.writeln()换行输出
92.document.body.noWrap=true;防止链接文字折行.
93.变量名.charAt(第几位),取该变量的第几位的字符.
94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.
95.字符串连接:string.concat(string2),或用+=进行连接
96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)
97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.
98.string.match(regExpression),判断字符是否匹配.
99.string.replace(regExpression,replaceString)替换现有字符串.
100.string.split(分隔符)返回一个数组存储值.
101.string.substr(start[,length])取从第几位到指定长度的字符串.
102.string.toLowerCase()使字符串全部变为小写.
103.string.toUpperCase()使全部字符变为大写.
104.parseInt(string[,radix(代表进制)])强制转换成整型.
105.parseFloat(string[,radix])强制转换成浮点型.
106.isNaN(变量):测试是否为数值型.
107.定义常量的关键字:const,定义变量的关键字:var

PHP5 数据过滤 - PECL filter扩展

数据过滤 - PECL filter扩展

PHP 5的PECL扩展库提供了一个新功能-filter扩展。使用filter可以极大的简化表单验证的编码量,尤其是对PHP新手而言,对提高程序的安全性很有帮助,从而远离SQL注入和不充分的字符过滤处理。

可以到http://pecl.php.net/package/filter下载最新的版本。在编写本书时它仍处于beta版本。filter软件包提供了数据类型验证和数据编码两个功能,它提供以下几个主要函数:

filter_data——用于过滤数据;
filter_input——用于表单提交内容的过滤;
filter_var——变量内容的过滤,与filter_data和is_int()标准函数类似。

这3个函数绝大部分的功能都很类似,只不过应用于不同的场合,它们使用的参数也是通用的,如表5-5所示。

表5-5



常量名称

   

FILTER_VALIDATE_INT

验证为整数,可以指定范围

FILTER_VALIDATE_FLOAT

验证为浮点数

FILTER_ VALIDATE_REGEXP

匹配一个PCRE正则表达式模式

FILTER_ VALIDATE_URL

匹配一个URL

FILTER_ VALIDATE_EMAIL

匹配一个email地址

FILTER_SANITIZE_STRING

去除超文本标签

FILTER_SANITIZE_ENCODED

对字符串使用URL编码

FILTER_VALIDATE_IP

验证值是否为IP地址


下面举例说明,请见如下脚本:


<?php
var_dump(filter_data('dujiang@ikang.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_data('sobooo.com', FILTER_VALIDATE_EMAIL));
?>


该脚本会输出如下的内容:


string(15) "dujiang@ikang.com"
NULL

由于字符串“sobooo.com”因为不是邮件地址的格式,因此被过滤后,显示为NULL值。
再看下面使用filter_input验证表单的脚本例子:


<?php
// 如使用FILTER_VALIDATE_INT验证用户输入的QQ号码,表单有一个文本框名字为qq:
$qq = filter_input(INPUT_POST, 'qq', FILTER_VALIDATE_INT);
if (!empty($qq)) {
echo "<p>您的QQ号码: $qq</p>\n";
} else {
echo '<p>请输入正确的QQ号码(应为纯数字)</p>';
}

//使用URL 编码
$url = "http://post.sina.com.cn/file.php?a=1&b=编码";

//显示被编码后的URL地址
echo filter_var($url, FILTER_SANITIZE_ENCODED);
?>
第3个例子比较实用,这个脚本代码可验证IP是否正确,并确认是否是内部网IP,代码如下所示。
<?php
// 验证IP v4地址
$ip = "192.168.0.23";

if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === False){
echo "$ip 是非法IP地址";
}else {
echo "$ip 是正确的IP地址";
//验证IP是公网IP还是私有IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === FALSE)   
{
echo "$ip 为内部网私有IP地址";
}else{
echo "$ip 为公网IP地址";
}
}
?>


因为PHP 5.2之后已经捆绑了filter扩展,但这一功能一直在升级,你可以查看最新的input_filter动态以及源代码,包括PHP创始人lerdof的个人


标签: 表单, 脚本, IP, filter