PHP中展现格式化的客商输入_php底蕴_脚本之家

您能够在此个页面下载那几个文书档案附带的文件,也能够在文书下载中的字符管理中下载那几个文书档案描述怎么样安全展现的有格式的客商输入。大家将探讨从未经过过滤的输出的权利险,给出叁个安全的显得格式化输出的法子。
未有过滤输出的危险假设你只是得到顾客的输入然后展现它,你只怕会损坏你的输出页面,如有的人能恶意地在她们付出的输入框中嵌入javascript脚本:
This is my comment. <script language=”javascript: alert(‘Do something
bad here!’)”>.
那样,即便顾客不是恶意的,也会损坏你的局地HTML的语句,如一个表格猛然中止,或是页面呈现不完全。
只展现无格式的文本
那是三个最简便易行的应用方案,你只是将顾客提交的音讯浮现为无格式的文件。使用htmlspecialchars()函数,将转向全体的字符为HTML的编码。
如<b>将扭转为,这能够确认保证不会有意料之外的HTML标识在不适用的时候输出。
那是一个好的应用方案,假设您的客户只关切从未格式的文件内容。可是,若是你付出一些得以格式化的力量,它将越来越好有的。
Formatting with Custom 马克up Tags 客商本人的号子作格式化
你能够提供新鲜的标志给客户采用,举例,你能够允许使用[b]…[/b]加重突显,[i]…[/i]斜体彰显,那样做轻松的探求替换操作就足以了:
$output = str_replace(“[b]”, “<b>”, $output); $output =
str_replace(“[i]”, “<i>”, $output);
再作的好一点,我们能够允许客户键入一些链接。比如,客商将同意输入[link=”url”]…[/link],我们将转移为<a
href=””>…</a>语句
那时,大家无法应用贰个简易的追寻替换,应该选取正则表达式实行沟通:
$output = ereg_replace(‘\[link=””\]’, ‘<a href=”\\1″>’,
$output); ereg_replace()的奉行正是:
查寻觅现[link=”…”]的字符串,使用<a href=”…”> 替换它
[[:graph:]]的意思是其余非空字符,有关正则表明式请看有关的稿子。
在outputlib.php的format_output()函数提供这些标识的转移,总体上的规范化是:
调用htmlspecialchars()将HTML标志转变来特殊编码,将不应当展现的HTML标志过滤掉,
然后,将一应有尽有大家自定义的号子转变相应的HTML标识。 请参看下边包车型地铁源代码:
<?php function format_output {
/****************************************************************************
* Takes a raw string and formats it for output using a special *
stripped down markup that is similar to HTML
****************************************************************************/
$output = htmlspecialchars); /* new paragraph */ $output =
str_replace(‘[p]’, ‘<p>’, $output); /* bold */ $output =
str_replace(‘[b]’, ‘<b>’, $output); $output =
str_replace(‘[/b]’, ‘</b>’, $output); /* italics */ $output =
str_replace(‘[i]’, ‘<i>’, $output); $output =
str_replace(‘[/i]’, ‘</i>’, $output); /* preformatted */
$output = str_replace(‘[pre]’, ‘<pre>’, $output); $output =
str_replace(‘[/pre]’, ‘</pre>’, $output); /* indented blocks */
$output = str_replace(‘[indent]’, ‘<blockquote>’, $output);
$output = str_replace(‘[/indent]’, ‘</blockquote>’, $output); /*
anchors */ $output = ereg_replace(‘\[anchor=””\]’, ‘<a
name=”\\1″></a>’, $output); /* links, note we try to prevent
javascript in links */ $output = str_replace(‘[link=”javascript’,
‘[link=” javascript’, $output); $output =
ereg_replace(‘\[link=””\]’, ‘<a href=”\\1″>’, $output);
$output = str_replace(‘[/link]’, ‘</a>’, $output); return nl2br;
} ?> 一些小心的地点:
记住替换自定义标志生成HTML标识字符串是在调用htmlspecialchars()函数之后,实际不是在这里个调用从前,不然你的许多不便的办事在调用htmlspecialchars()后将半涂而废。
在通过转变之后,查找HTML代码将是替换过的,如双引号”将改成”
nl2br()函数将回车换行符调换为<br>标识,也要在htmlspecialchars()之后。
当转变[links=””] 到 <a href=””>,
你必须要承认提交者不会插入javascript脚本,二个回顾的方式去退换[link=”javascript
到 [link=” javascript, 这种方法将不替换,只是将原本的代码展现出来。
outputlib.php 在浏览器中调用test.php,能够看出format_output()
的选用情状 符合规律的HTML标志不能够被使用,用下列的新鲜标识替换它: – this is
[b]bold[/b] – this is [i]italics[/i] – this is
[link=”http://www.phpbuilder.com"\]a link[/link] – this is
[anchor=”test”]an anchor, and a [link=”#test”]link[/link] to the
anchor [p]段落 [pre]预先格式化[/pre] [indent]驰骋文本[/indent]
那些只是超少的灯号,当然,你可以依赖你的须要随便参与更加的多的号子
Conclusion 结论 那么些讨论提供安全展现客户输入的方式,能够运用在下列程序中
留言板 客商提议 系统布告 BBS系统

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图