告诉我的服务器端脚本提交的表单或数据来自可靠来源或来自我的网站的最佳方式是什么? 我已经执行了很多服务器端数据审查,并认为我可以通过客户端进一步改善这一点
AM是一个php / mysql开发人员
答案 0 :(得分:1)
要找出发布数据的用户的IP:
$ip = $_SERVER['REMOTE_ADDR'];
echo "<b>IP Address= $ip</b>";
根据IP,您可以决定用户是否信任。 (例如,如果您只想信任一系列特殊的IP地址)
每当我在PHP中阅读发布的变量时,我都会使用它来过滤它们:
function check_string($string) {
// allowed chars: a-z,A-Z,0-9,-,_
if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$string)))
return true;
return false;
}
它将过滤所有不是a-z,A-Z,0-9, - 或_的字符,并稍微增强网站的安全性。如果您可以访问您的网络服务器:
如果您有权访问Web服务器配置,则禁用服务器横幅(例如,显示操作系统和Apache版本)。这些信息对黑客非常有用,你想禁用任何可以帮助他们的东西;)
阻止目录列表(例如使用.htaccess文件)。一个简单的例子是:
选项All -Indexes
使用有限的用户帐户运行网络服务器(最好是chroot用户)
答案 1 :(得分:1)
在mysql查询中使用mysql_real_escape_string并在html帖子中使用htmlentities。
示例:
错:
<?php
if($_SERVER['REQUEST_METHOD'] == "post"){
echo $_POST['hai'];
}
?>
右:
<?php
if($_SERVER['REQUEST_METHOD'] == "post"){
echo htmlentities($_POST['hai']);
}
?>
$ _ POST也可以是$ _GET
错误:
<?php
$query = "SELECT * FROM table WHERE msg = '". $_GET['hai'] ."'";
?>
右:
<?php
$query = "SELECT * FROM table WHERE msg = '". mysql_real_escape_string($_GET['hai']) ."'";
?>
当你从mysql表中获取信息时不要忘记使用htmlentities ...
问候
答案 2 :(得分:0)
我总是使用一个处理此类问题的类,它将处理服务器/客户端并确保任何输入都是从服务器本身进行的。然后它将验证并确保没有给出特殊字符。
如果这有帮助,请告诉我,它在一段时间前对我有所帮助。 :)
答案 3 :(得分:0)
我认为最好的选择是为请求添加数字签名,即使是简单的签名。
例如,您的站点或受信任的源添加了在添加秘密“salt”(未发送)之后计算它的请求的SHA校验和。服务器获取数据,添加相同的盐并计算SHA签名,如果SHA匹配,则源知道秘密,您可以信任内容。
答案 4 :(得分:0)
我猜您的问题意味着CSRF ......只需生成并添加验证令牌即可。
许多框架都可以为您管理这些内容。
答案 5 :(得分:-1)
伙计们,感谢您的帮助,我感激不尽。一般来说,我在谈论客户端安全性,即确保来自客户端的数据来自原始来源。
通常情况下,SSL可能就是答案,经过大量浏览后,我发现有两个网站在一定程度上解决了这个问题:aSSL和Jquery implementation
这样我的数据可以保证达到90%的水平
你觉得怎么样?