php数据库安全
这个是不会的,只要其它人没有权限访问你的文件就可以,例如从服务器,FTP,网站后台文件浏览之类的,只从前台界面是拿不到php里面的变量(不包括网站漏洞)。
⑵ 如何实现php的安全最大化怎样避免sql注入漏洞和xss跨站脚本攻击漏洞
使用php安全模式
服务器要做好管理,账号权限是否合理。
假定所有用户的输入都是“恶意”的,防止XSS攻击,譬如:对用户的输入输出做好必要的过滤
防止CSRF,表单设置隐藏域,post一个随机字符串到后台,可以有效防止跨站请求伪造。
防御SQL注入。
避免SQL注入漏洞
1.使用预编译语句
2.使用安全的存储过程
3.检查输入数据的数据类型
4.从数据库自身的角度考虑,应该使用最小权限原则,不可使用root或dbowner的身份连接数据库。若多个应用使用同一个数据库,也应该为数据库分配不同的账户。web应用使用的数据库账户,不应该有创建自定义函数,操作本地文件的权限。
避免XSS跨站脚本攻击
1.假定所有用户输入都是“邪恶”的
2.考虑周全的正则表达式
3.为cookie设置HttpOnly,防止cookie劫持
4.外部js不一定可靠
5.出去不必要的HTML注释
6. 针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数。
⑶ php连接sql数据库安全
其实的问题题目是正确的,只是这个问题内容有点让我不理解。
数据库链接SQL安全在于如何防止注入和别的溢出什么,
这些都是一个良好的编码习惯,懂得过滤和相关的代码规范
至于你说的mysql 明文username password。是这样的。
而且config文件会被下载,只有一种可能那就是你服务器问题了。
在我们挂载的服务器上,是不可能直接读取源文件。只有经过服务器端编译过后的文本会通过CGI传输到用户电脑中,这个时候看到的不是文件本身,而是编译出来的数据,至于想拿到密码和用户名。OK。入侵服务器吧。当然。如果服务器够烂。很是很快的。。
所以我觉得你的担心是多虑的,你可以去了解下服务器对于文本的控制。
顺便提点名词你认识下。。MVC,单入口模式。
希望对你有帮助,我是从事PHP开发很久了。
⑷ thinkphp真的安全吗
测试:下载thinkphp的当前最新版本ThinkPHP_3.2,我们来看看代码,用事实说话,在sql注入防止上。thinkphp的处理方式
ThinkPHP\Library\Think\Model.class.php里面有如下的代码
protected function parseSql($sql,$parse) {
// 分析表达式
if(true === $parse) {
$options = $this->_parseOptions();
$sql = $this->db->parseSql($sql,$options);
}elseif(is_array($parse)){ // SQL预处理
$parse = array_map(array($this->db,'escapeString'),$parse);
$sql = vsprintf($sql,$parse);
}else{
$sql = strtr($sql,array('__TABLE__'=>$this->getTableName(),'__PREFIX__'=>C('DB_PREFIX')));
}
$this->db->setModel($this->name);
return $sql;
}
array_map(array($this->db,'escapeString'),$parse);
关键是调用了对应的数据库类型里面的escapeString进行处理。因为php通常和mysql作为搭配,我就看了一下mysql的处理。里面包括了mysql和mysqli的处理代码
mysql版本的处理
public function escapeString($str) {
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}else{
return mysql_escape_string($str);
}
}
mysqli的处理方式。
public function escapeString($str) {
if($this->_linkID) {
return $this->_linkID->real_escape_string($str);
}else{
return addslashes($str);
}
}
看似很正常的处理方式,但是你们明白addslashes、mysql_escape_string、mysql_real_escape_string它们的真正的安全性吗,下面这些文章会让你明白的。
按照文章的说明,测试代码test.php,文件保存为gbk格式测试一下就明白addslashes安全性了
<?php
error_reporting(0);
header('Content-Type: text/html; charset=gbk');
$username = $_POST['username'];
$sqlx="select id,isDisplay from user where usname='".addslashes($username)."' and passwd='$password'";
echo $sqlx;
echo "<br>";
echo addslashes($username);
echo 444;
?>
<form action="" method=post>
<input type=text name="username" value="">
<input type=submit>
</form>
下面还有一个连接地址,详细说明了关于addslashes、mysql_escape_string、mysql_real_escape_string的安全性问题。而且这个问题早在2006年就被提出了哦,thinkphp还是不重视
最后说一句,按照php官方说法,最好用pdo的预处理,看看thinkphp的封装,完全是误人子弟
ThinkPHP\Library\Think\Db\Driver\Pdo.class.php
protected function parseValue($value) {
if(is_string($value)) {
$value = strpos($value,':') === 0 ? $this->escapeString($value) : '\''.$this->escapeString($value).'\'';
}elseif(isset($value[0]) && is_string($value[0]) && strtolower($value[0]) == 'exp'){
$value = $this->escapeString($value[1]);
}elseif(is_array($value)) {
$value = array_map(array($this, 'parseValue'),$value);
}elseif(is_bool($value)){
$value = $value ? '1' : '0';
}elseif(is_null($value)){
$value = 'null';
}
return $value;
}
public function escapeString($str) {
switch($this->dbType) {
case 'PGSQL':
case 'MSSQL':
case 'SQLSRV':
case 'MYSQL':
return addslashes($str);
case 'IBASE':
case 'SQLITE':
case 'ORACLE':
case 'OCI':
return str_ireplace("'", "''", $str);
}
}
⑸ php+mysql这种情况下如何保证我的数据库信息的安全
建立一个链接文件:如conn.php,然后用zend将conn.php文件加密就可以了。
conn.php代码如下:
<?php
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='12345678';
$mysql_database='mycounter';
$conn=@mysql_connect($mysql_server_name,$mysql_username,$mysql_password);
if ($conn) {
if (!@mysql_select_db($mysql_database))
{
die("选择数据库是失败");
}
}
else
{
die("数据库连接失败");
}
?>
⑹ php在链接数据库时候,代码里需要填写链接数据库的地址和帐号密码,如何保证这些信息的安全
无论应用服务器和数据库服务器是否在同一台服务机器上,mysql都有相应的访问控制,比如可以设置为某个IP,如果像你这样写的代码的话,那么表示应用服务器和数据库服务器是在同一个机器上的,当mysql将访问控制在应用服务器的那台机器上时,其他的机器连接就没有什么用了。当然,也不是说就完全没有办法破解,只是相对来说比较难了。
⑺ PHP数据如何安全的输入输出
你的表单的name比如是title 你提交的时候 过滤一下 可以用 mysql_escape_string($title);
这个函数是可以过滤一些特殊的字符,你提交数据的时候 用$t=$_POST('$title');先得到你的这个表单的内容,然后用
$sql="Insert into 表 values ('$t')";
$result=mysql_query($sql);
if($result)
{
echo "success";
}
else
{
echo "false";
}
这个是插入的
$sql="select * from 表";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
echo $row['b']."<br/>";
}
这个是输出你刚才插入的内容的语句
希望对你有帮助
⑻ php如何防止写数据库冲突
打开数据库时,用写锁定模式,这样只允许单个进程写操作。
⑼ php连接数据库的时,帐号,密码的安全问题!
使用zend guard对php源文件进行加密,加密之后的php源文件就变成了乱码,当然计算机是认识这些乱码的哈。
⑽ php登录数据库,密码都直接写在程序里吗不怕安全问题啊
密码都通过加密然后存如数据库
也就是说密码不是明文存储的,登录的时候对比的是加密后的hash