①.、dede 自定义表单如何防止别人恶意提交
②.、php避免form表单重复提交
③.、PHP如何做好最基础的安全防范
打开plus下diy.php文件
找到
if(!is_array($diyform))
{
showmsg('自定义表单不存在',?'-1');
exit();
}
再其下添加
//检测游客是否已经提交过表单
if(isset($_COOKIE['VOTE_MEMBER_IP']))
if($_COOKIE['VOTE_MEMBER_IP']?==?$_SERVER['REMOTE_ADDR'])
ShowMsg('您已经填写过表单啦','-1');
}?else?{
此方法能够仿制初级用户重复提交,但是如果清除cookie的话还可以可以提交的.
php避免form表单重复提交
下面的情况就会导致表单重复提交:
使用浏览器后退按钮重复之前的操作,导致重复提交表单.
使用浏览器历史记录重复提交表单.
浏览器重复的HTTP请求.
网页被恶意刷新.
下面是几种解决办法:
form name=form1 method="POST" action="/" target=_blank
p
input type="button" value="提交" onclick="javascript:{this.disabled=true;document.form1.submit();}"
/p
/form
二:利用session
在session中?放一个特殊标志.当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里.接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据.
如果发现表单提交里没有有效的.标志串,这说明表单已经被提交过了,忽略这次提交.
这使你的web应用有了更高级的XSRF保护
加载提交的页面时候,生成一个随机数,
$code = mt_rand(0,1000000);
存储在表单的隐藏输入框中:
input type="hidden" name="code" value=""
在接收页面的PHP代码如下:
php
session_start();
if(isset($_POST['code'])) {
if($_POST['code'] == $_SESSION['code']){
// 重复提交表单了
}else{
$_SESSION['code'] =$_POST['code']; //存储code
}?
三:利用cookies
原理和session差不多,但是cookies一旦用户浏览器禁用cookies,这功能就失效了
if(isset($_POST['submit'])){
header("Location:".$_SERVER[PHP_SELF]);exit();
if(isset($_COOKIE["tempcookie"])){
setcookie("tempcookie","",0);echo "您已经提交过表单";
四:利用header函数跳转
if (isset($_POST['submit'])) {
header('location:success.php');//处理数据后,转向到其他页面
五:利用数据库来添加约束
直接在数据库里添加唯一约束或创建唯一索引,一旦发现用户重复提交了,直接抛出警告或者提示,或者只处理第一次提交的数据,这是最直接有效的方法,要求前期的数据库设计和架构要考虑周全.
六:Post/Redirect/Get模式
if (isset($_POST['action']) $_POST['action'] == 'submitted') {
//处理数据,如插入数据后,立即转向到其他页面
header('location:submits_success.php');
;
PHP如何做好最基础的安全防范
php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,PHP如何做好最基础的安全防范呢?下面我为大家解答一下,希望能帮到您!
当开发一个互联网服务的时候,必须时刻牢记安全观念,并在开发的代码中体现.PHP脚本语言对安全问题并不关心,特别是对大多数没有经验的开发者来说.每当你讲任何涉及到钱财事务等交易问题时,需要特别注意安全问题的考虑,例如开发一个论坛或者是一个购物车等.
安全保护一般性要点
不相信表单
对于一般的Javascript前台验证,由于无法得知用户的行为,例如关闭了浏览器的javascript引擎,这样通过POST恶意数据到服务器.需要在服务器端进行验证,对每个php脚本验证传递到的数据,防止XSS攻击和SQL注入.
不相信用户
要假设你的网站接收的每一条数据都是存在恶意代码的,存在隐藏的威胁,要对每一条数据都进行清理
关闭全局变量
在php.ini文件中进行以下配置:
register_globals = Off
如果这个配置选项打开之后,会出现很大的安全隐患.例如有一个process.php的脚本文件,会将接收到的数据插入到数据库,接收用户输入数据的表单可能如下:
这样,当提交数据到process.php之后,php会注册一个$username变量,将这个变量数据提交到process.php,同时对于任何POST或GET请求参数,都会设置这样的变量.如果不是显示进行初始化那么就会出现下面的问题:
// Define $authorized = true only if user is authenticated
if
(authenticated_user()) {
$authorized = true;
此处,假设authenticated_user函数就是判断$authorized变量的值,如果开启了register_globals配置,那么任何用户都可以发送一个请求,来设置$authorized变量的值为任意值从而就能绕过这个验证.所有的这些提交数据都应该通过PHP预定义内置的全局数组来获取,包括$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,其中$_REQUEST是一个$_GET/$_POST/$_COOKIE三个数组的联合变量,默认的顺序是$_COOKIE、$_POST、$_GET.
推荐的安全配置选项
error_reporting设置为Off:不要暴露错误信息给用户,开发的时候可以设置为ON
safe_mode设置为Off
register_globals设置为Off
将以下函数禁用:system、exec、passthru、shell_exec、proc_open、popen
open_basedir设置为 /tmp ,这样可以让session信息有存储权限,同时设置单独的网站根目录expose_php设置为Offallow_url_fopen设置为Offallow_url_include设置为Off
SQL注入攻击
对于操作数据库的SQL语句,需要特别注意安全性,因为用户可能输入特定语句使得原有的SQL语句改变了功能.类似下面的例子:
$sql ="select * from pinfo where product = '$product'";
那么最终SQL语句就变成了如下的◆样子:
DROP pinfo;
SELECT 'FOO'
这样就会变成三条SQL语句,会造成pinfo表被删除,这样会造成严重的后果.这个问题可以简单的使用PHP的内置函数解决:
$sql = 'Select * from pinfo where product = '"' mysql_real_escape_string($product) . '"';
防止基本的XSS攻击
function transform_HTML( $string , $length null) { // Helps prevent XSS attacks
// Remove dead space.
$string = trim( $string );
// Prevent potential Unicode codec problems.
// HTMLize HTML-specific characters.
$string = htmlentities( $string , ENT_NOQUOTES);
$string = str_replace ( "#" , "#" , $string );
$string = str_replace ( "%" , "%" , $string );
$length = intval ( $length );
if ( $length 0) {
$string = substr ( $string , 0, $length );
}return $string ;
这样浏览器渲染的结果其实是:
a href = ""
SCRIPT Dosomethingmalicious
这样就达到了攻击的目的.为了防止这种情况,需要在transform_HTML函数的基础上再将#和%转换为他们对应的实体符号,同时加上了$length参数来限制提交的数据的最大长度.
使用SafeHTML防止XSS攻击
上述关于XSS攻击的防护非常简单,但是不包含用户的所有标记,同时有上百种绕过过滤函数提交javascript代码的方法,也没有办法能完全阻止这个情况.目前,没有一个单一的脚本能保证不被攻击突破,但是总有相对来说防护程度更好的.一共有两个安全防护的方式:白名单和黑名单.其中白名单更加简单和有效.一种白名单解决方案就是SafeHTML,它足够智能能够识别有效的HTML,然后就可以去除任何危险的标签.这个需要基于HTMLSax包来进行解析.安装使用SafeHTML的方法:
②.、将文件放入服务器的classes 目录,这个目录包含所有的SafeHTML和HTMLSax库
③.、在自己的脚本中包含SafeHTML类文件
④.、建立一个SafeHTML对象
⑤.、使用parse方法进行过滤
php/* If you're storing the HTMLSax③php in the /classes directory, along
// Define some sample bad code.
$data = This data would raise an alert
" ;// Create a safehtml object.$safehtml = new safehtml();// Parse and sanitize the data.$safe_data = $safehtml -parse( $data );// Display result. echo 'The sanitized data is ' . $safe_data ;
SafeHTML并不能完全防止XSS攻击,只是一个相对复杂的脚本来检验的方式.
使用单向HASH加密方式来保护数据
php$data = "Stuff you want encrypted" ;
$key = "Secret passphrase used to encrypt your data" ;
}function decrypt( $data , $key ,$cipher , $mode ) {// Decrypt data
mcrypt函数需要以下信息:
①.、待加密数据
②.、用来加密和解密数据的key
③.、用户选择的加密数据的特定算法(cipher:
, MCRYPT_DES
)
④.、用来加密的模式
⑤.、加密的种子,用来起始加密过程的数据,是一个额外的二进制数据用来初始化加密算法
以上就是土嘎嘎小编为大家整理的php防恶意提交相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!