关于网站安全方面的问题疑惑(XSS、SQL等)
一个网站在开发的时候 就需要考虑安全问题吗?
服务器安全除外 是不是只要做好了 上传、表单危险字符串过滤就可以了? XSS SQL
回复讨论(解决方案)
xss sql注入 跨域攻击 特殊字符处理
哪有这么简单。
2. 输入验证和输出显示
2.1 命令注入
2.2 跨站脚本
2.3 文件包含
2.4 代码注入
2.5 SQL注入
2.6 XPath注入
2.7 HTTP响应拆分
2.8 文件管理
2.9 文件上传
2.10 变量覆盖
2.11 动态函数
3. 会话安全
3.1 HTTPOnly设置
3.2 domain设置
3.3 path设置
3.4 cookies持续时间
3.5 secure设置
3.6 session固定
3.7 CSRF
4. 加密
4.1 明文存储密码
4.2 密码弱加密
4.3 密码存储在攻击者能访问到的文件
5. 认证和授权
5.1 用户认证
5.2 函数或文件的未认证调用
5.3 密码硬编码
6. 随机函数
6.1 rand()
6.2 mt_srand()和mt_rand()
7. 特殊字符和多字节编码
7.1 多字节编码
8. PHP危险函数
8.1 缓冲区溢出
8.2 session_destroy()删除文件漏洞
8.3 unset()-zend_hash_del_key_or_index漏洞
9. 信息泄露
9.1 phpinfo
10. PHP环境
10.1 open_basedir设置
10.2 allow_url_fopen设置
10.3 allow_url_include设置
10.4 safe_mode_exec_dir设置
10.5 magic_quote_gpc设置
10.6 register_globals设置
10.7 safe_mode设置
10.8 session_use_trans_sid设置
10.9 display_errors设置
10.10 expose_php设置
命令注入
PHP执行系统命令可以使用以下几个函数:system、exec、passthru、“、shell_exec、popen、proc_open、pcntl_exec
我们通过在全部程序文件中搜索这些函数,确定函数的参数是否会因为外部提交而改变,检查这些参数是否有经过安全处理。
防范方法:
使用自定义函数或函数库来替代外部命令的功能
使用escapeshellarg函数来处理命令参数
使用safe_mode_exec_dir指定可执行文件的路径
跨站脚本
反射型跨站常常出现在用户提交的变量接受以后经过处理,直接输出显示给客户端;存储型跨站常常出现在用户提交的变量接受过经过处理后,存储在数据库里,然后又从数据库中读取到此信息输出到客户端。输出函数经常使用:echo、print、printf、vprintf、
对于反射型跨站,因为是立即输出显示给客户端,所以应该在当前的php页面检查变量被客户提交之后有无立即显示,在这个过程中变量是否有经过安全检查。
对于存储型跨站,检查变量在输入后入库,又输出显示的这个过程中,变量是否有经过安全检查。
防范方法:
如果输入数据只包含字母和数字,那么任何特殊字符都应当阻止
对输入的数据经行严格匹配,比如邮件格式,用户名只包含英文或者中文、下划线、连字符
对输出进行HTML编码,编码规范
( (
) )
# #
& &
" "
‘ '
` %60
文件包含
PHP可能出现文件包含的函数:include、include_once、require、require_once、show_source、highlight_file、readfile、file_get_contents、fopen、 nt>file
防范方法:
对输入数据进行精确匹配,比如根据变量的值确定语言en.php、cn.php,那么这两个文件放在同一个目录下’language/’.$_POST[‘lang’].’.php’,那么检查提交的数据是否是en或者cn是最严格的,检查是否只包含字母也不错
通过过滤参数中的/、..等字符
代码注入
PHP可能出现代码注入的函数:eval、preg_replace+/e、assert、call_user_func、call_user_func_array、create_function
查找程序中程序中使用这些函数的地方,检查提交变量是否用户可控,有无做输入验证
防范方法:
输入数据精确匹配
白名单方式过滤可执行的函数
SQL注入
SQL注入因为要操作数据库,所以一般会查找SQL语句关键字:insert、delete、update、select,查看传递的变量参数是否用户可控制,有无做过安全处理
防范方法:
使用参数化查询
更详细的看这里:http://www.sectop.com/?p=111
楼上的回答好强悍。
个人感觉,上传、表单通过字符串过滤,以及mysql转义(或者PDO接口)都可达到安全级别。
关键难难在防御服务器攻击。操作系统(不断的打补丁),apahce(潜在的漏洞),php(升级到最新版本),服务器端口(关闭某些端口号),FTP(权限和密码安全),SSH(端口号,密码)……

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

HQL和SQL在Hibernate框架中进行比较:HQL(1.面向对象语法,2.数据库无关的查询,3.类型安全),而SQL直接操作数据库(1.与数据库无关的标准,2.可执行复杂查询和数据操作)。

《OracleSQL中除法运算的用法》在OracleSQL中,除法运算是常见的数学运算之一。在数据查询和处理过程中,除法运算可以帮助我们计算字段之间的比例或者得出特定数值的逻辑关系。本文将介绍OracleSQL中除法运算的用法,并提供具体的代码示例。一、OracleSQL中除法运算的两种方式在OracleSQL中,除法运算可以使用两种不同的方式进行

学c语言的网站:1、C语言中文网;2、菜鸟教程;3、C语言论坛;4、C语言帝国;5、脚本之家;6、天极网;7、红黑联盟;8、51自学网;9、力扣;10、C Programming。详细介绍:1、C语言中文网,这是一个专门为初学者提供C语言学习资料的网站,内容丰富,包括基础语法、指针、数组、函数、结构体等多个模块;2、菜鸟教程,这是一个综合性的编程学习网站等等。

Oracle和DB2是两个常用的关系型数据库管理系统,它们都有自己独特的SQL语法和特点。本文将针对Oracle和DB2的SQL语法进行比较与区别,并提供具体的代码示例。数据库连接在Oracle中,使用以下语句连接数据库:CONNECTusername/password@database而在DB2中,连接数据库的语句如下:CONNECTTOdataba

MyBatis动态SQL标签解读:Set标签用法详解MyBatis是一个优秀的持久层框架,它提供了丰富的动态SQL标签,可以灵活地构建数据库操作语句。其中,Set标签是用于生成UPDATE语句中SET子句的标签,在更新操作中非常常用。本文将详细解读MyBatis中Set标签的用法,以及通过具体的代码示例来演示其功能。什么是Set标签Set标签用于MyBati

SQL中的Identity是什么,需要具体代码示例在SQL中,Identity是一种用于生成自增数字的特殊数据类型,它常用于唯一标识表中的每一行数据。Identity列通常与主键列配合使用,可以确保每条记录都有一个独一无二的标识符。本文将详细介绍Identity的使用方式以及一些实际的代码示例。Identity的基本使用方式在创建表时,可以使用Identit

解决办法:1、检查登录用户是否具有足够的权限来访问或操作该数据库,确保该用户具有正确的权限;2、检查SQL Server服务的帐户是否具有访问指定文件或文件夹的权限,确保该帐户具有足够的权限来读取和写入该文件或文件夹;3、检查指定的数据库文件是否已被其他进程打开或锁定,尝试关闭或释放该文件,并重新运行查询;4、尝试以管理员身份运行Management Studio等等。

如何使用SQL语句在MySQL中进行数据聚合和统计?在进行数据分析和统计时,数据聚合和统计是非常重要的步骤。MySQL作为一个功能强大的关系型数据库管理系统,提供了丰富的聚合和统计函数,可以很方便地进行数据聚合和统计操作。本文将介绍使用SQL语句在MySQL中进行数据聚合和统计的方法,并提供具体的代码示例。一、使用COUNT函数进行计数COUNT函数是最常用
